1. 程式人生 > >android 版本更新 靜默安裝及自啟動

android 版本更新 靜默安裝及自啟動

    前段時間公司要求實現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" />

總共就這麼多啦! 完事 

一個多月之前完成的現在才總結....以後有時間了及時總結!!!!!!!!