Android客戶端apk自動檢測更新自動下載自動安裝的實現方法
改進了一個可以檢測版本更新自動下載自動安裝的客戶端升級方案。
在下載之前刪除之前的歷史下載檔案,減少垃圾資料。
先給出核心類
public class DownloadService extends Service { private DownloadManager mDownloadManager; private long enqueue; private BroadcastReceiver receiver; private static final String APK_URL= IPAddress.DEFAULT_IP+"/portrait/app-youni.apk"; // private static final String APK_NAME="youni.apk"; private static final String APK_NAME="youni_"+ System.currentTimeMillis()+"_.apk"; @Nullable @Override public IBinder onBind(Intent intent) { DebugLog.v("onBind"); return null; } @Override public void onCreate() { DebugLog.v("onCreate"); super.onCreate(); /*刪除以前下載的安裝包*/ RecursionDeleteFile(new File(Environment.getExternalStorageDirectory() + "/download/youni/")); } @Override public void onStart(Intent intent, int startId) { DebugLog.v("onStart"); super.onStart(intent, startId); } @Override public int onStartCommand(Intent intent, int flags, int startId) { DebugLog.v("onStartCommand"); receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { intent = new Intent(Intent.ACTION_VIEW); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/download/youni/"+APK_NAME)), "application/vnd.android.package-archive"); startActivity(intent); stopSelf(); } }; registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); startDownload(); return Service.START_STICKY; } @Override public void onDestroy() { DebugLog.v("onDestroy"); unregisterReceiver(receiver); super.onDestroy(); } private void startDownload() { mDownloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); DownloadManager.Request request = new DownloadManager.Request(Uri.parse(APK_URL)); request.setDescription("正在為您下載 友你 App的最新版本"); request.setMimeType("application/vnd.android.package-archive"); request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS+"/youni", APK_NAME); enqueue = mDownloadManager.enqueue(request); } /** * 遞迴刪除檔案和資料夾 * @param file 要刪除的根目錄 */ public void RecursionDeleteFile(File file){ if(file.isFile()){ file.delete(); return; } if(file.isDirectory()){ File[] childFile = file.listFiles(); if(childFile == null || childFile.length == 0){ file.delete(); return; } for(File f : childFile){ RecursionDeleteFile(f); } file.delete(); } } }然後再檢測到伺服器有新版本後,彈出對話方塊,詢問使用者是否下載
/*系統提示對話方塊*/ new AlertDialog.Builder(NewMainActivity.this).setTitle("操作提示")//設定對話方塊標題 .setMessage("檢測到最新版本,是否要升級?")//設定顯示的內容 .setPositiveButton("後臺下載",new DialogInterface.OnClickListener() {//新增確定按鈕 @Override public void onClick(DialogInterface dialog, int which) {//確定按鈕的響應事件 startService(new Intent(getApplicationContext(), DownloadService.class)); } }).setNegativeButton("下次再說",new DialogInterface.OnClickListener() {//新增返回按鈕 @Override public void onClick(DialogInterface dialog, int which) {//響應事件 } }).show();//在按鍵響應事件中顯示此對話方塊下載後就可以自動安裝了
相關文章
- 客戶端自動配置安裝(expect工具)客戶端
- 自動化運維-Python paramiko 實現無客戶端系統巡檢運維Python客戶端
- Android studio 自動複製生成的 apkAndroidAPK
- 基於DotNetty實現自動釋出 - 自動檢測程式碼變化Netty
- 如何實現 AppStore App 的自動下載APP
- Flutter外掛開發之APK自動安裝FlutterAPK
- win/mac 端有哪些客戶端自動化測試的想法呢Mac客戶端
- go 的自動過載工具安裝Go
- PXE實現系統自動化安裝
- php 自動類載入類 composer.json 實現自動載入PHPJSON
- 客戶端單週發版下的多分支自動化管理與實踐客戶端
- Spring AOP 實現《自動自動填充Entity》Spring
- 如何禁用win10自動更新驅動_win10關閉驅動自動更新的方法Win10
- Python+selenium實現Drcom校園網自動檢測網路以及自動登入Python
- 模擬手機裝置:使用 Playwright 實現移動端自動化測試
- sqlalchemy實現時間列自動更新SQL
- 自動的自動化:EvoSuite 自動生成JUnit的測試用例UI
- Selenium自動化實現web自動化-1Web
- 自動化裝置測試與自動化測試的區別
- php實現自動化執行環境檢測PHP
- MQTT 客戶端自動重連實踐|構建可靠 IoT 裝置連線MQQT客戶端
- API自動化測試平臺,高效實現對API的自動化測試API
- 移動端自動化測試實戰-思寒-極客時間-返現24元
- AutoRunner 功能自動化測試專案實訓之crm客戶管理系統試用安裝包下載(二十)
- 安信實驗室教你如何實現Windows自動安裝!Windows
- win10停止自動更新操作 win10停止自動更新方法Win10
- 交換機統一監控和遠端控制:自動發現、自動監控、自動告警、自動修復
- CRM公海客戶自動分配功能的實現
- 配置ks.cfg實現自動安裝過程
- WPS自動更新怎麼關閉? 詳解WPS自動更新的關閉方法步驟
- windows10 自動更新怎麼關閉_關閉windows10 自動更新的方法Windows
- 使用Python爬蟲實現自動下載圖片Python爬蟲
- kickstart半自動安裝centos系統與pxe自動安裝centos系統CentOS
- MQTT 客戶端自動重連最佳實踐|構建可靠 IoT 裝置連線MQQT客戶端
- Android無障礙自動化結合opencv實現支付寶能量自動收集AndroidOpenCV
- 如何利用 RPA 實現自動化獲客?
- npm如何自動更新安裝包?NPM
- 誰能接這個活:做一個網址的PC客戶端,實現自動控制客戶端
- win10 自動更新開啟方法_win10怎麼設定自動更新Win10