最近我一直面臨我的Android應用程序更新過程的問題。Android應用程序更新問題
簡而言之,應用程序能夠檢查更新版本是否上傳到服務器上。如果是這樣,用戶決定是否更新。該應用被加載和標準安裝開始後:
final Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(PATH_TO_APK)), "application/vnd.android.package-archive");
startActivity(intent)
的問題是,當機器人意圖完成安裝,「理論上」與活動信息「應用程序已安裝」和2個按鈕「完成」,「打開」。我寫了「理論上」,因爲到目前爲止,我所遇到的情況如下:
應用程序安裝,「安裝應用程序」與郵件活動顯示,用戶點擊「打開」,但什麼也沒有發生(的Android 2.3 *。 )或應用程序確實可以正確打開 - 這種行爲是隨機的。
安裝了應用程序,顯示消息「應用程序已安裝」的活動,但突然消失。
試圖繞過這個錯誤(?)我發現http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_REPLACED。我實施的BroadcastReceiver啓動了Launch Activity,讓我們假設它是一個合適的解決方案。
<receiver android:name=\".MyReceiver\" >
<intent-filter>
<action android:name="android.intent.action.ACTION_PACKAGE_REPLACED" />
//Or from API 12 <action android:name="android.intent.action.ACTION_MY_PACKAGE_REPLACED" />
</intent-filter>
</receiver>
該解決方案必須修改,因爲較低的API的應用程序(低於12)無法處理ACTION_MY_PACKAGE_REPLACED所以我實現依賴API行爲其中:
允許安裝正常UDPATE應用和發射(API < 12)
ACTION_MY_PACKAGE_REPLACED注意到後通過MyReceiver啓動了更新應用程序。
這是我目前的解決方案。
我的問題是:
爲什麼更新後的應用單擊 「打開」 安裝後的Android與API低於12後隨機打開?
爲什麼使用「完成」/「打開」按鈕的活動在具有更高API的設備上消失?
我試圖在安裝前完成應用,但沒有幫助。
我的解釋是,在安裝過程之後,一個新軟件包必須覆蓋舊軟件包,以便舊軟件包必須被簡單地刪除,這是啓動活動消失的主要原因。
正如我寫的,這是我目前的解決方案,我不滿意。如果有人能澄清此事,我將非常感激。
感謝您的閱讀。
編輯:
好了,解決的方法很簡單:成功更新您需要啓動意圖爲新的任務(arrrgh ...):
final Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(PATH_TO_APK)), "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);