android應(yīng)用開發(fā)app手動更新通知欄下載實(shí)踐

app手動更新通知欄下載

說到app手動更新,大伙兒都能寫出一套來,網(wǎng)上的代碼也比較多。思路也是各顯神通。比如通過在啟動app的時候,通過api接口獲得服務(wù)器最新的版本號,然后和本地的版本號比較,來判斷是否需要彈出提示框下載。也可以通過推送的自定義消息來實(shí)現(xiàn)。我們這里主要討論的是app通知欄下載。

在這里我和同事寫了兩套通知欄下載的代碼,但是看了同事的代碼之后,才感覺網(wǎng)上最近流傳的那種通過service啟動,子線程下載,間斷發(fā)送消息給通知欄,通知欄更新進(jìn)度,這一套邏輯實(shí)在太low了。


一.通過系統(tǒng)的DownloadManager 實(shí)現(xiàn)

實(shí)現(xiàn)步驟:

1:我們要創(chuàng)建一個service
2:在service啟動的時候創(chuàng)建一個廣播接受者
3:當(dāng)BroadcastReceiver接受到下載完成的廣播時,開始執(zhí)行安裝。
好了,大功告成,可以交差了。


首先我們這里我們只需要在彈出的對話框中,將點(diǎn)擊事件設(shè)置為:

public class DownloadService extends Service {
      /**廣播接受者*/
    private BroadcastReceiver receiver;
    /**系統(tǒng)下載管理器*/
    private DownloadManager dm;
    /**系統(tǒng)下載器分配的唯一下載任務(wù)id,可以通過這個id查詢或者處理下載任務(wù)*/
    private long enqueue;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        /**新建一個廣播接受者*/
        receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                /**當(dāng)系統(tǒng)下載完成,就提示安裝*/
                install(context );
                /**銷毀當(dāng)前的service*/
                stopSelf();
            }
        };
        /**過濾器,用來監(jiān)聽系統(tǒng)下載完成時的廣播*/
        IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
        /**注冊廣播*/
        registerReceiver(receiver, filter);
        /**開始下載*/
        startDownload(intent.getStringExtra("downUrl"));
        return Service.START_STICKY;
    }

    @Override
    public void onDestroy() {
        unregisterReceiver(receiver);
        super.onDestroy();
    }

    private void startDownload(String downUrl) {
        /**獲得系統(tǒng)下載器        */
        dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
        /**設(shè)置下載地址*/
        DownloadManager.Request request = new DownloadManager.Request(Uri.parse(downUrl));
        /**設(shè)置下載文件的類型*/
        request.setMimeType("application/vnd.android.package-archive");
              /**設(shè)置下載存放的文件夾和文件名字*/
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "xxxx.apk");
        /**設(shè)置下載時或者下載完成時,通知欄是否顯示*/        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
        request.setTitle("xxxx");
        /**執(zhí)行下載,并返回任務(wù)唯一id*/
        enqueue = dm.enqueue(request);
    }

    public static void startDownload(Context context, String downUrl) {
        Intent intent = new Intent(context, DownloadService.class);
        intent.putExtra("downUrl", downUrl);
        context.startService(intent);
    }

    /**安裝*/
    public static void install(Context context) {
        
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "xxxx.apk")), "application/vnd.android.package-archive");
        context.startActivity(intent);
    }

    public static void install(Context context ) {
        install(context,true);
    }
}

如果沒有對下載通知欄ui要求過多的話,就可以采用這種形式。下載過程完全交給系統(tǒng)去做,安全可靠。

關(guān)于更多downloadmanager,如果不愿去看源碼的話,可以看下trinea的講解:
http://www.trinea.cn/android/android-downloadmanager/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,366評論 25 708
  • 《連載風(fēng)云錄》【盜墓系連載】沉舟專題【盜墓系連載】第一部 南墻(已完結(jié))歡迎閱讀!【盜墓系連載】《沉舟》目錄 文丨...
    薔薇下的陽光閱讀 664評論 23 22
  • 很多剛?cè)腴T的菜鳥級攝影愛好者都會遇到一個難題,拿起相機(jī)誰都會,但真正的拍出想要的效果卻很難。下面這些攝影的小技巧一...
    輕淺vv時光閱讀 354評論 0 0
  • 兒童畫清明這張花了三小時,然后同事說太幼稚,我又三秒鐘(有點(diǎn)夸張,其實(shí)有三分鐘)做了另外兩張同款低配版。。大家覺得...
    三千燼閱讀 734評論 4 3
  • 2017年我的理財目標(biāo)是 1、堅持記賬,養(yǎng)成好的消費(fèi)習(xí)慣。 2、將年收益率達(dá)到10%,將資產(chǎn)合理配置 3、將收入增...
    兔兔園閱讀 338評論 0 0

友情鏈接更多精彩內(nèi)容