安卓service后台下载安装升级包

来源:互联网 发布:黎明杀机n卡优化 编辑:程序博客网 时间:2024/04/30 00:46

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

原创粉丝点击