Android app check version update, download in the notification bar, update download progress, download complete automatic installation, as follows:
- Check the current version number
The Versioncode in the Androidmanifest file is used to identify the version, where the server puts a new version of Apk,versioncode greater than the current version, and the following code is used to get the value of Versioncode
PackageInfo PackageInfo = Context.getpackagemanager (). Getpackageinfo (Context.getpackagename (), 0); int localVersion = Packageinfo.versioncode;
Compare with current Versioncode and server side, if less than, make version update
/** * Download apk * * @param apkuri * *
private void downloadnewapk (String Apkuri, string version) { manager = (notificationmanager) context . Getsystemservice (context. Notification_service)); notify = new Notification (); Notify.icon = R.drawable.ic_launcher; The notification bar displays the layout file used Notify.contentview = new Remoteviews (Context.getpackagename (), R.layout.view_notify_item ); Manager.notify (notify); Build the downloaded APK file fileinstall = Fileoperate.mkdirsdcardfile ("DownLoad", Apk_name + version + ". apk"); Downloadschedule (Apkuri, Completehandler, context, fileinstall); }
Fileoperate is a file tool class that you write yourself
The layout displayed by the notification bar, View_notify_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_i V "android:gravity=" center_vertical "android:text=" 0% "android:textcolor=" @color/white "Androi D: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="/></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 }//Read the length of the file each time 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 (); 1k byte[per read] buffer = new Byte[perlength]; int len =-1; FileOutputStream out = new FileOutputStream (file); int temp = 0; while (len = in.read (buffer))! =-1) {//write to file out.write (buffer, 0, Len); Current progress int schedule = (int) ((File.length () * +)/length); Notifies update progress (10,7,4 evenly divisible before notification, no need to update progress every time) if (temp! = Schedule &am p;& (Schedule% = = 0 | | Schedule% 4 = 0 | | Schedule% 7 = 0)) {//Ensure that the same data is only sent once temp = schedule; Handler.sendemptymessage (schedule); }} out.flush (); Out.close (); In.close (); } catch (IOException e) {e.printstacktrace (); }}}.start (); }
Handler updates based on download progress
- Update Notification bar progress bar
/** * UPDATE Notification bar * *
Private Handler Completehandler = new Handler () {public void Handlemessage (Android.os.Message msg) { //update Notification bar
if (Msg.what <) { Notify.contentView.setTextViewText ( r.id.notify_updata_values_tv, Msg.what + "%"); Notify.contentView.setProgressBar (r.id.notify_updata_progress, msg.what, false); Manager.notify (notify); } else { Notify.contentView.setTextViewText ( r.id.notify_updata_values_tv, "Download Complete"); Notify.contentView.setProgressBar (r.id.notify_updata_progress, msg.what, false);//clear the notification bar Manager.cancel (+); INSTALLAPK (Fileinstall);};};
The system installation is called after the download is complete.
/** * 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 done.