您的位置:首页 > 其它

DownLoadManager的使用

2016-03-11 15:11 295 查看
最近项目版本更新,需要干掉以前的那种应用更新功能,当用户点击确定更新的时候更新在后头默默的更新,同时在通知栏里面显示进度,下载完应用之后再跳到安装页面。本代码的逻辑是在引导页启动一个异步的IntentService,检查更新之后使用downLoadManager下载 核心代码如下:

清单文件:

      <activity

            android:name=".MainActivity"

            android:label="@string/title_activity_main" >

             <intent-filter >

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

         <receiver android:name=".MyReceiver">

            <intent-filter >

                <action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>

                <action android:name="android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED"/>

            </intent-filter>

        </receiver>

        <service android:name=".DownLoadService" />

Activity里面的版本号匹配:

 /**

  * 2 * 获取版本号 3 * @return 当前应用的版本号 4

  */

 public String getVersion() {

  try {

   PackageManager manager = this.getPackageManager();

   PackageInfo info = manager.getPackageInfo(this.getPackageName(), 0);

   String version = info.versionName;

   return this.getString(R.string.app_name) + version;

  } catch (Exception e) {

   e.printStackTrace();

   return "找不到版本号";

  }

 }

 // 版本号检查的工具方法

 // 版本号检查的工具方法

 private void checkTool(JSONObject response) {

  JSONObject jsonObj = (JSONObject) response.opt("data");

  String version = jsonObj.optString("version");

  if (!getVersion().equals(version)) {

   Dialog dialog = null;

   String title = jsonObj.optString("title");

   String content = jsonObj.optString("content");

   final String downLoadUrl = jsonObj.optString("downloadUrl");

   AlertDialog.Builder builder = new AlertDialog.Builder(this);

   builder.setTitle(title);

   builder.setMessage(content);

   builder.setNegativeButton("取消",

     new DialogInterface.OnClickListener() {

      @Override

      public void onClick(DialogInterface arg0, int arg1) {

       // TODO Auto-generated method stub

       arg0.cancel();

      }

     });

   builder.setPositiveButton("确定",

     new DialogInterface.OnClickListener() {

      @Override

      public void onClick(DialogInterface d, int arg1) {

       // TODO Auto-generated method stub

       d.cancel();

       Intent intent = new Intent(MainActivity.this,

         DownLoadService.class);

       intent.putExtra("downLoadUrl", downLoadUrl);

       MainActivity.this.startService(intent);

      }

     });

   dialog = builder.create();

   dialog.show();

  }

 }

 // 检查版本

 public void checkUpdate(final String versionCode, String url) {

  RequestQueue requestQueue = Volley.newRequestQueue(this);

  JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(

    Request.Method.GET, url, null,

    new Response.Listener<JSONObject>() {

     @Override

     public void onResponse(JSONObject response) {

      if (response.optBoolean("success")) {

       checkTool(response);

      }

     }

    }, new Response.ErrorListener() {

     @Override

     public void onErrorResponse(VolleyError arg0) {

      arg0.printStackTrace();

      System.out.println("sorry,Error");

     }

    });

  requestQueue.add(jsonObjectRequest);

 }

DownLodService里面代码如下:

 protected void onHandleIntent(Intent intent) {

  // TODO Auto-generated method stub

     String serviceString = Context.DOWNLOAD_SERVICE; 

     final DownloadManager downloadManager; 

     downloadManager = (DownloadManager)getSystemService(serviceString);

  String downLoadUrl = intent.getStringExtra("downLoadUrl");

  Log.e("download", "enter the service download"+downLoadUrl);

  DownloadManager.Request request = new DownloadManager.Request(

    Uri.parse("http://count.liqucn.com/d.php?id=444776&urlos=android&from_type=web"));

  request.setAllowedNetworkTypes(Request.NETWORK_WIFI);

  // 设置通知栏标题

  request.setNotificationVisibility(Request.VISIBILITY_VISIBLE);

  request.setTitle("下载");

  request.setDescription("贵金属正在下载");

  request.setAllowedOverRoaming(false);

  // 设置文件存放目录

 /* File file = new File(Environment.DIRECTORY_DOWNLOADS);

  if(!file.exists()){

   file.mkdirs();

  }*/

  

  request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "myApp.apk");

  MyReceiver.myReference =downloadManager.enqueue(request);

          最后在广播里面监听下载完成的事件:

 public void onReceive(Context mContext, Intent intent) {

  // TODO Auto-generated method stub

  Log.e("MyReceiver", " enter thisi receiver");

  if (intent.getAction().equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE)) {

   long id = intent

     .getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);

   System.out.println(id == myReference);

   if (id == this.myReference) {

    Intent startIntent = new Intent(Intent.ACTION_VIEW);

    startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    startIntent.setDataAndType(

      Uri.fromFile(new File(Environment

        .getExternalStorageDirectory()

        + "/download/myApp.apk")),

      "application/vnd.android.package-archive");

    mContext.startActivity(startIntent);

   }

   Toast.makeText(mContext, "下载完毕", 0).show();

  } else if (intent.getAction().equals(

    DownloadManager.ACTION_NOTIFICATION_CLICKED)) {

   // Toast.makeText(MainActivity.this, "别瞎点!!!",

   // Toast.LENGTH_SHORT).show();

  }

 }



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  service DownLoadManager