2013-07-23 102 views
8

最近我一直面臨我的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個按鈕「完成」,「打開」。我寫了「理論上」,因爲到目前爲止,我所遇到的情況如下:

  1. 應用程序安裝,「安裝應用程序」與郵件活動顯示,用戶點擊「打開」,但什麼也沒有發生(的Android 2.3 *。 )或應用程序確實可以正確打開 - 這種行爲是隨機的。

  2. 安裝了應用程序,顯示消息「應用程序已安裝」的活動,但突然消失。

試圖繞過這個錯誤(?)我發現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); 

回答

0

首先,添加的意圖過濾器「在像清單如下:

`<activity android:name="com.package.MainActivity"> 
    <intent-filter> 
     <action android:name="android.intent.action.VIEW" /> 
     <data android:scheme="file" /> 
     <data android:mimeType="application/vnd.android.package-archive" /> 
    </intent-filter> 
</activity>` 

然後,將你的意圖標誌的新任務:

intentAPK.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);