Android(安卓)Apk自动更新service(直接拿来用)
16lz
2021-01-26
Android sdk version 9以上就有DownManager
使用DownManager,我们可以很简便的在各个安卓机子上升级自家的应用
本例写了一个UpdataService实现后台下载新的APK到sdcard,并自动安装更新。
[java] view plain copy- /**
- * 检测安装更新文件的助手类
- *
- * @author G.Y.Y
- *
- */
- public class UpdataService extends Service {
- /** 安卓系统下载类 **/
- DownloadManager manager;
- /** 接收下载完的广播 **/
- DownloadCompleteReceiver receiver;
- /** 初始化下载器 **/
- private void initDownManager() {
- manager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
- receiver = new DownloadCompleteReceiver();
- //设置下载地址
- DownloadManager.Request down = new DownloadManager.Request(
- Uri.parse("http://gdown.baidu.com/data/wisegame/fd84b7f6746f0b18/baiduyinyue_4802.apk"));
- // 设置允许使用的网络类型,这里是移动网络和wifi都可以
- down.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE
- | DownloadManager.Request.NETWORK_WIFI);
- // 下载时,通知栏显示途中
- down.setNotificationVisibility(Request.VISIBILITY_VISIBLE);
- // 显示下载界面
- down.setVisibleInDownloadsUi(true);
- // 设置下载后文件存放的位置
- down.setDestinationInExternalFilesDir(this,
- Environment.DIRECTORY_DOWNLOADS, "baidumusic.apk");
- // 将下载请求放入队列
- manager.enqueue(down);
- //注册下载广播
- registerReceiver(receiver, new IntentFilter(
- DownloadManager.ACTION_DOWNLOAD_COMPLETE));
- }
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- // 调用下载
- initDownManager();
- return super.onStartCommand(intent, flags, startId);
- }
- @Override
- public IBinder onBind(Intent intent) {
- return null;
- }
- @Override
- public void onDestroy() {
- // 注销下载广播
- if (receiver != null)
- unregisterReceiver(receiver);
- super.onDestroy();
- }
- // 接受下载完成后的intent
- class DownloadCompleteReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- //判断是否下载完成的广播
- if (intent.getAction().equals(
- DownloadManager.ACTION_DOWNLOAD_COMPLETE)) {
- //获取下载的文件id
- long downId = intent.getLongExtra(
- DownloadManager.EXTRA_DOWNLOAD_ID, -1);
- //自动安装apk
- installAPK(manager.getUriForDownloadedFile(downId));
- //停止服务并关闭广播
- UpdataService.this.stopSelf();
- }
- }
- /**
- * 安装apk文件
- */
- private void installAPK(Uri apk) {
- // 通过Intent安装APK文件
- Intent intents = new Intent();
- intents.setAction("android.intent.action.VIEW");
- intents.addCategory("android.intent.category.DEFAULT");
- intents.setType("application/vnd.android.package-archive");
- intents.setData(apk);
- intents.setDataAndType(apk,"application/vnd.android.package-archive");
- intents.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- android.os.Process.killProcess(android.os.Process.myPid());
- // 如果不加上这句的话在apk安装完成之后点击单开会崩溃
- startActivity(intents);
- }
- }
- }
AndroidManifest.xml注册service
[html] view plain copy- <service
- android:name="com.example.test.UpdataService"
- android:enabled="true"
- >
- service>
添加调用DownManager的权限
[html] view plain copy
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
更多相关文章
- Android(安卓)FTP 客户端 上传/下载 带进度条实战源码
- Eclipse 插件安装方法和插件加载失败解决办法
- android小注意
- AOSP: 下载 android kernel 源码
- Android(安卓)studio开发环境搭建教程与软件安装教程(从零开始学a
- Android(安卓)学习笔记 BroadcastReceiver广播...
- Android下载的视频,在相册中显示
- Android+NDK+OpenGLES开发环境配置
- 关于Studio和EclipseSHA1值的查看