Android程序版本更新之通知栏更新下载安装

Android应用检查版本更新后,在通知栏下载,更新下载进度,下载完成自动安装,效果图如下:

•检查当前版本号

AndroidManifest文件中的versionCode用来标识版本,在服务器放一个新版本的apk,versioncode大于当前版本,下面代码用来获取versioncode的值

PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); int localVersion = packageInfo.versionCode;

用当前versioncode和服务端比较,如果小于,就进行版本更新

•下载apk文件

/** * 下载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; // 通知栏显示所用到的布局文件 notify.contentView = new RemoteViews(context.getPackageName(), R.layout.view_notify_item); manager.notify(100, notify); //建立下载的apk文件 File fileInstall = FileOperate.mkdirSdcardFile("downLoad", APK_NAME + version + ".apk"); downLoadSchedule(apkUri, completeHandler, context, fileInstall); }

FileOperate是自己写的文件工具类

通知栏显示的布局,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_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> /** * 连接网络,下载一个文件,并传回进度 * * @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; } // 每次读取文件的长度 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[] buffer = new byte[perLength]; int len = -1; FileOutputStream out = new FileOutputStream(file); int temp = 0; while ((len = in.read(buffer)) != -1) { // 写入文件 out.write(buffer, 0, len); // 当前进度 int schedule = (int) ((file.length() * 100) / length); // 通知更新进度(10,7,4整除才通知,没必要每次都更新进度) if (temp != schedule && (schedule % 10 == 0 || schedule % 4 == 0 || schedule % 7 == 0)) { // 保证同一个数据只发了一次 temp = schedule; handler.sendEmptyMessage(schedule); } } out.flush(); out.close(); in.close(); } catch (IOException e) { e.printStackTrace(); } } }.start(); }

handler根据下载进度进行更新

•更新通知栏进度条

/** * 更新通知栏 */ private Handler completeHandler = new Handler() { public void handleMessage(android.os.Message msg) { // 更新通知栏 if (msg.what < 100) { notify.contentView.setTextViewText( R.id.notify_updata_values_tv, msg.what + "%"); notify.contentView.setProgressBar(R.id.notify_updata_progress, 100, msg.what, false); manager.notify(100, notify); } else { notify.contentView.setTextViewText( R.id.notify_updata_values_tv, "下载完成"); notify.contentView.setProgressBar(R.id.notify_updata_progress, 100, msg.what, false);// 清除通知栏 manager.cancel(100); installApk(fileInstall); } }; };

下载完成后调用系统安装。

•安装apk

/** * 安装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); }

安装完成搞定

时间: 2024-09-19 08:16:25

Android程序版本更新之通知栏更新下载安装的相关文章

Android程序版本更新之通知栏更新下载安装_Android

Android应用检查版本更新后,在通知栏下载,更新下载进度,下载完成自动安装,效果图如下: •检查当前版本号 AndroidManifest文件中的versionCode用来标识版本,在服务器放一个新版本的apk,versioncode大于当前版本,下面代码用来获取versioncode的值 PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); int

android 版本检测 Android程序的版本检测与更新实现介绍_Android

做个网站的安卓客户端,用户安装到自己手机上,如果我出了新版本怎么办呢?要有版本更新功能. 本来版本检测最好可以自动进行.但如果每次开启程序,都要先检测一轮,是一种浪费,毕竟版本更新是小概率的事情.或许可以程序开启的时候,判断一下时间,单日就检测,双日就不检测,或者随机什么的,降低一下检测的频率? 我采取的做法是将检测功能做到了菜单上,用户有需要,就手动打开自己检测一下.反正我们这个是网站客户端,有版本更新,在网站上发个通告就行了. 版本检测与更新有以下几个关键步骤: 1.检测有无新版本 2.下载

android 版本检测 Android程序的版本检测与更新实现介绍

做个网站的安卓客户端,用户安装到自己手机上,如果我出了新版本怎么办呢?要有版本更新功能. 本来版本检测最好可以自动进行.但如果每次开启程序,都要先检测一轮,是一种浪费,毕竟版本更新是小概率的事情.或许可以程序开启的时候,判断一下时间,单日就检测,双日就不检测,或者随机什么的,降低一下检测的频率? 我采取的做法是将检测功能做到了菜单上,用户有需要,就手动打开自己检测一下.反正我们这个是网站客户端,有版本更新,在网站上发个通告就行了. 版本检测与更新有以下几个关键步骤: 1.检测有无新版本 2.下载

android 从服务器上获取APK下载安装

简单的为新手做个分享.  网上有些资料,不过都是很零散,或是很乱的,有的人说看不懂. 一直有新手说 做到服务器更新APK时没有思路,这里做个简单的分享,希望有不同思路的可以讨论.  下面做个很简单的读取处理和讲解思路. 代码带有注释: try { URL url = new URL(params[0]); HttpURLConnection connection = (HttpURLConnection) url .openConnection(); connection.setConnectT

Windows 8.1系统更新下载安装操作步骤

  首先进入应用商店,之后会看到"更新Windows"的巨大提示,我们可以从这里免费更新到Windows 8.1,直接点击进入. 图示:进入应用商店选择"更新Windows" 接下来应用商店会给出Windows 8.1重要新特性和功能的简介,以及更新的相关说明,包括升级需要下载文件的大小.点击"下载"按钮.系统提示在下载过程中可以继续做别的操作,系统会在下载完成后提示后面的操作. 图示:系统升级说明,点击"下载" Win8.1

3月30日蚕豆网不推荐的Android应用:盗版《快手下载》

前言:如雨后春笋般杂乱滋生的Android app遍布于网络中.下载平台中.用户的手机中,目前由于监管不严.开放性过大这些应用的安全性便成了当前Android手机最大问题.通讯录被复制.私人照片丢失.信息被公开等等事件的出现,其罪魁祸首当属那些存在安全隐患.内藏恶意代码的Android手机应用.鉴于此情况, 蚕豆网联合<安全管家>定期为大家审查Android应用的安全性,尽我们最大力量来帮助用户来认清app.选择app,把最安全.最稳定的Android环境奉献给广大用户.应用名称:<快手

从网站上安装更新 android 程序

问题描述 从网站上安装更新 android 程序 我在后台每24小时检查一次程序版本,这是在网络服务器上进行的而不是在android market上运行.如果更新可用,它会提示用户下载新的apk. Uri uri = Uri.parse(downloadURL);Intent intent = new Intent(Intent.ACTION_VIEWuri);startActivity(intent); 上面的代码用来打开用户浏览器然后开始下载.我需要不打开浏览器也能下载apk文件,或者我需要

Android 程序的安装、卸载和更新

 安装程序:软件从无到有. 卸载程序:软件从有到无. 更新程序:软件的覆盖安装,可以保留原版本的数据,提升软件版本.   安装程序的方法:   1.  通过Intent机制,调出系统安装应用,重新安装应用的话,会保留原应用的数据.   String fileName = Environment.getExternalStorageDirectory() + apkName; Uri uri = Uri.fromFile(new File(fileName)); Intent intent = n

Android编程实现应用自动更新、下载、安装的方法_Android

本文实例讲述了Android编程实现应用自动更新.下载.安装的方法.分享给大家供大家参考,具体如下: 我们看到很多Android应用都具有自动更新功能,用户一键就可以完成软件的升级更新.得益于Android系统的软件包管理和安装机制,这一功能实现起来相当简单,下面我们就来实践一下. 1. 准备知识 在AndroidManifest.xml里定义了每个Android apk的版本标识: <manifest xmlns:android="http://schemas.android.com/a