Android program version Update-notification bar update download and installation, android program version
After the Android app checks for version updates, download the updated version in the notification bar, update the download progress, and automatically install the downloaded version as follows:
- Check the current version number
VersionCode in the AndroidManifest file is used to identify the version, and a new version of apk is put on the server. versioncode is later than the current version. The following code is used to obtain the versioncode value.
PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);int localVersion = packageInfo.versionCode;
Compare the current versioncode with the server. If the value is smaller than, update the version.
/*** Download apk ** @ param apkUri */
Private void downLoadNewApk (String apkUri, String version) {manager = (icationicationmanager) context. getSystemService (context. NOTIFICATION_SERVICE); y = new Notification (); notify. icon = R. drawable. ic_launcher; // The layout file notify is displayed in the notification bar. contentView = new RemoteViews (context. getPackageName (), R. layout. view_policy_item); manager. Y (100, notify); // create the downloaded apk File fileInstall = FileOperate. mkdirSdcardFile ("downLoad", APK_NAME + version + ". apk "); downLoadSchedule (apkUri, completeHandler, context, fileInstall );}
FileOperate is a self-written file tool class.
Layout shown in the notification bar, view_policy_item.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="10dp" android:background="#00000000" android:padding="5dp" > <ImageView android:id="@+id/notify_icon_iv" android:layout_width="25dp" android:layout_height="25dp" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/notify_updata_values_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginBottom="6dp" android:layout_marginLeft="15dp" android:layout_marginTop="5dp" android:layout_toRightOf="@id/notify_icon_iv" android:gravity="center_vertical" android:text="0%" android:textColor="@color/white" android:textSize="12sp" /> <ProgressBar android:id="@+id/notify_updata_progress" style="@android:style/Widget.ProgressBar.Horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/notify_icon_iv" android:layout_marginTop="4dp" android:max="100" /></RelativeLayout>
/*** Connect to the network, download a file, and return the progress ** @ param uri * @ param handler * @ param context * @ param file */
Public static void downLoadSchedule (final String uri, final Handler handler, Context context, final File file) {if (! File. exists () {handler. sendEmptyMessage (-1); return;} // The final int perLength = 4096; new Thread () {@ Override public void run () {super. run (); try {URL url = new URL (uri); HttpURLConnection conn = (HttpURLConnection) url. openConnection (); conn. setDoInput (true); conn. connect (); InputStream in = conn. getInputStream (); // 2865412 long length = conn. getContentLength (); // read 1 k byte [] B each time Uffer = new byte [perLength]; int len =-1; FileOutputStream out = new FileOutputStream (file); int temp = 0; while (len = in. read (buffer ))! =-1) {// write the file out. write (buffer, 0, len); // current progress int schedule = (int) (file. length () * 100)/length); // notifies you of the update progress (10, 7, 4). if (temp! = Schedule & (schedule % 10 = 0 | schedule % 4 = 0 | schedule % 7 = 0 )) {// ensure that the same data is sent only once temp = schedule; handler. sendEmptyMessage (schedule) ;}} out. flush (); out. close (); in. close ();} catch (IOException e) {e. printStackTrace ();}}}. start ();}
Handler is updated based on the download progress
/***** Update notification bar */
Private Handler completeHandler = new Handler () {public void handleMessage (android. OS. message msg) {// update the notification bar if (msg. what <100) {policy. contentView. setTextViewText (R. id. notify_updata_values_ TV, msg. what + "%"); required y. contentView. setProgressBar (R. id. yy_updata_progress, 100, msg. what, false); manager. required y (100, required y);} else {required y. contentView. setTextViewText (R. id. notify_updata_values_ TV, "download completed"); y. contentView. setProgressBar (R. id. yy_updata_progress, 100, msg. what, false); // clear the notification bar manager. cancel (100); installApk (fileInstall );}};};
After the download is complete, call the system installation.
/***** Install apk ** @ param file */
Private void installApk (File file) {Intent intent = new Intent (); intent. addFlags (Intent. FLAG_ACTIVITY_NEW_TASK); intent. setAction (android. content. intent. ACTION_VIEW); intent. setDataAndType (Uri. fromFile (file), "application/vnd. android. package-archive "); context. startActivity (intent );}
Installation completed
Android can update the notification bar
The network of the computer used on the simulator,
The mobile phone is on the network of the mobile phone. How is the network speed of your mobile phone?
After Samsung 5830i is updated, the notification bar displays software updates, which is not caused by the installation of other software.
Open settings first-Application-samsnug apps open, click Close, then click the Software Update icon in the toolbar-click Install, and then the mobile phone will automatically restart. All I need is gt s5830i. this is done.