Android sdk version 9以上就有DownManager

使用DownManager,我们可以很简便的在各个安卓机子上升级自家的应用

本例写了一个UpdataService实现后台下载新的APK到sdcard,并自动安装更新。

[java]  view plain  copy  
  1. /** 
  2.  * 检测安装更新文件的助手类 
  3.  *  
  4.  * @author G.Y.Y 
  5.  *  
  6.  */  
  7.   
  8. public class UpdataService extends Service {  
  9.   
  10.     /** 安卓系统下载类 **/  
  11.     DownloadManager manager;  
  12.   
  13.     /** 接收下载完的广播 **/  
  14.     DownloadCompleteReceiver receiver;  
  15.   
  16.     /** 初始化下载器 **/  
  17.     private void initDownManager() {  
  18.           
  19.         manager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);  
  20.           
  21.         receiver = new DownloadCompleteReceiver();  
  22.   
  23.         //设置下载地址  
  24.         DownloadManager.Request down = new DownloadManager.Request(  
  25.                 Uri.parse("http://gdown.baidu.com/data/wisegame/fd84b7f6746f0b18/baiduyinyue_4802.apk"));  
  26.           
  27.         // 设置允许使用的网络类型,这里是移动网络和wifi都可以  
  28.         down.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE  
  29.                 | DownloadManager.Request.NETWORK_WIFI);  
  30.           
  31.         // 下载时,通知栏显示途中  
  32.         down.setNotificationVisibility(Request.VISIBILITY_VISIBLE);  
  33.           
  34.         // 显示下载界面  
  35.         down.setVisibleInDownloadsUi(true);  
  36.           
  37.         // 设置下载后文件存放的位置  
  38.         down.setDestinationInExternalFilesDir(this,  
  39.                 Environment.DIRECTORY_DOWNLOADS, "baidumusic.apk");  
  40.           
  41.         // 将下载请求放入队列  
  42.         manager.enqueue(down);  
  43.           
  44.         //注册下载广播  
  45.         registerReceiver(receiver, new IntentFilter(  
  46.                 DownloadManager.ACTION_DOWNLOAD_COMPLETE));  
  47.     }  
  48.   
  49.     @Override  
  50.     public int onStartCommand(Intent intent, int flags, int startId) {  
  51.           
  52.         // 调用下载  
  53.         initDownManager();  
  54.           
  55.         return super.onStartCommand(intent, flags, startId);  
  56.     }  
  57.   
  58.     @Override  
  59.     public IBinder onBind(Intent intent) {  
  60.       
  61.         return null;  
  62.     }  
  63.   
  64.     @Override  
  65.     public void onDestroy() {  
  66.   
  67.         // 注销下载广播  
  68.         if (receiver != null)  
  69.             unregisterReceiver(receiver);  
  70.           
  71.         super.onDestroy();  
  72.     }  
  73.   
  74.     // 接受下载完成后的intent  
  75.     class DownloadCompleteReceiver extends BroadcastReceiver {  
  76.           
  77.         @Override  
  78.         public void onReceive(Context context, Intent intent) {  
  79.   
  80.             //判断是否下载完成的广播  
  81.             if (intent.getAction().equals(  
  82.                     DownloadManager.ACTION_DOWNLOAD_COMPLETE)) {  
  83.                   
  84.                 //获取下载的文件id  
  85.                 long downId = intent.getLongExtra(  
  86.                         DownloadManager.EXTRA_DOWNLOAD_ID, -1);  
  87.                   
  88.                 //自动安装apk  
  89.                 installAPK(manager.getUriForDownloadedFile(downId));  
  90.                   
  91.                 //停止服务并关闭广播  
  92.                 UpdataService.this.stopSelf();  
  93.   
  94.             }  
  95.         }  
  96.   
  97.         /** 
  98.          * 安装apk文件 
  99.          */  
  100.         private void installAPK(Uri apk) {  
  101.               
  102.             // 通过Intent安装APK文件  
  103.             Intent intents = new Intent();  
  104.               
  105.             intents.setAction("android.intent.action.VIEW");  
  106.             intents.addCategory("android.intent.category.DEFAULT");  
  107.             intents.setType("application/vnd.android.package-archive");  
  108.             intents.setData(apk);  
  109.             intents.setDataAndType(apk,"application/vnd.android.package-archive");  
  110.             intents.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  111.             android.os.Process.killProcess(android.os.Process.myPid());  
  112.             // 如果不加上这句的话在apk安装完成之后点击单开会崩溃  
  113.               
  114.             startActivity(intents);  
  115.   
  116.         }  
  117.   
  118.     }  
  119. }  


AndroidManifest.xml注册service

[html]  view plain  copy  
  1. <service   
  2.           android:name="com.example.test.UpdataService"  
  3.           android:enabled="true"  
  4.           >  
  5.       service>  


添加调用DownManager的权限

[html]  view plain  copy  
  1. <uses-permission android:name="android.permission.INTERNET" />  
  2.   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
  3.   <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />  

更多相关文章

  1. Android(安卓)FTP 客户端 上传/下载 带进度条实战源码
  2. Eclipse 插件安装方法和插件加载失败解决办法
  3. android小注意
  4. AOSP: 下载 android kernel 源码
  5. Android(安卓)studio开发环境搭建教程与软件安装教程(从零开始学a
  6. Android(安卓)学习笔记 BroadcastReceiver广播...
  7. Android下载的视频,在相册中显示
  8. Android+NDK+OpenGLES开发环境配置
  9. 关于Studio和EclipseSHA1值的查看

随机推荐

  1. sqlserver 快速生成汉字的首拼字母的函数
  2. SQLserver中字符串查找功能patindex和cha
  3. 将mater库中的系统存储过程批量生成*.sql
  4. SQLServer中字符串左对齐或右对齐显示的s
  5. SqlServer参数化查询之where in和like实
  6. SqlServer参数化查询之where in和like实
  7. Sql Server 查询性能优化之走出索引的误
  8. Sql Server查询性能优化之不可小觑的书签
  9. sqlserver 脚本和批处理指令小结
  10. SQL Server中通过扩展存储过程实现数据库