android 版本更新 靜默安裝及自啟動
阿新 • • 發佈:2019-01-02
前段時間公司要求實現app的靜默升級安裝並自啟動,寫完都有一個多月了,現在總結下.公司的app只會安裝在我們定製的廣告平板上,所以都是有root許可權的,至於如何獲取root許可權,這裡就不說了.直接上程式碼
一:當前版本號與伺服器版本對比 如有更新則去伺服器下載新版本
// 獲取當前軟體版本號 versionCode=context.getPackageManager(). getPackageInfo(context.getPackageName(), 0).versionCode;
再去伺服器獲取新版本號,網路請求就不講了,方法很多,得到兩個版本號之後對比有新的則去伺服器下載新版本APK
二:將新版本apk存至sd卡
Process prcess=getRuntime.exec("su");//申請root許可權
再執行adb命令:"pm install -r "+apkPath,
這一步就執行完靜默安裝了,一個執行adb命令的工具(這個工具是我在網上找的,找不到原作者....如被原作者碰到 我就刪了):執行adb命令工具
三;自啟動,也算是最難的一部分
這塊做的時候在網上找了很多資料,發現有的地方並沒有網上講的那麼複雜,最後完成的思路是註冊了一個廣播,監聽是否重新裝了安裝包
<receiver android:name=".broadcastreceiver.BCRUpgradeApk"> <intent-filter> <action android:name="android.intent.action.PACKAGE_REPLACED"/> <data android:scheme="package"/> </intent-filter> </receiver>
註冊這個廣播的時候碰到了一個坑爹的問題,我們這個app之前也有一個廣播監聽開機自啟動,把兩個廣播寫在一個receiver裡面就不起作用,分開寫好了,也不知道為什麼.....有人知道可以告訴下我
在收到這個廣播的時候自啟動就ok了
if (intent.getAction().equals("android.intent.action.PACKAGE_REPLACED")){ Toast.makeText(context,"升級了一個安裝包",Toast.LENGTH_SHORT).show(); Intent intent2 = new Intent(context, StartUpActivity.class); intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent2); }
我這樣寫是完美實現哦.....!!!!!,實現了才發現沒有網上說的那麼複雜
所需的許可權:
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> <uses-permission android:name= "android.permission.RESTART_PACKAGES" /> <uses-permission android:name="android.permission.INSTALL_PACKAGES" tools:ignore="ProtectedPermissions" />
總共就這麼多啦! 完事
一個多月之前完成的現在才總結....以後有時間了及時總結!!!!!!!!