2013-03-12 88 views
2

我正在嘗試對我編寫的應用程序進行編程更新,因爲它不是Google Play應用程序,我想提供一種更新方法。Android開始Intent.ACTION_INSTALL_PACKAGE活動並且額外返回結果不會返回

我一直在四處搜索,發現如何在下載APK進行更新後啓動Android安裝程序,但我需要從安裝程序獲取結果,告訴我更新是否成功,或者如果它被用戶取消。

我在StackOverflow上看到了一堆關於此問題的問題,以及通常涉及使用廣播接收器的答案。問題在於它只能接收關於正在安裝的軟件包的意圖,而不是關於取消的安裝失敗。

我做了一些更多的研究,似乎Intent API提供了一些額外的例如Intent.EXTRA_RETURN_RESULT,如果設置爲true應該返回安裝程序活動的結果 - 我想通過onActivityResult。不幸的是,這是行不通的。有沒有人得到這個工作/是否這樣工作?

這裏是代碼準備安裝活動開始,我目前有:

  Intent installApp = new Intent(Intent.ACTION_INSTALL_PACKAGE); 
      installApp.setData(downloadedApk); 
      installApp.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true); 
      installApp.putExtra(Intent.EXTRA_RETURN_RESULT, true); 
      installApp.putExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME, context.getApplicationInfo().packageName); 
      context.startActivityForResult(installApp, 1); 
+0

'EXTRA_RETURN_RESULT'是新的API等級14 - 你的Android 4.0以上版本的設備上測試這個? – CommonsWare 2013-03-12 16:21:14

回答

3

你使用的碎片? onActivityResult將從您稱爲startActivity(...)的Activity或Fragment中調用。片段#startActivity(...)確實存在。使用它來調用片段的onActivityResult(...)。 如果您不使用片段,此解決方法將工作。

解決方法僞

// CURRENT_VERSION is a const with the current APK version as int 

Activity#onStart() { 
    super.onStart(); 
    checkForUpdaterResult(); 
    /*...*/ 
} 

Activity#checkForUpdaterResult() { 
    final int updateVersion = preferences.getInt(UPDATE_VERSION, -1); 
    switch(updateVersion) { 
    case -1:break; 
    default: 
     // updateVersion = oldVersion is smaller than the new currentVersion 
     boolean success = updateVersion < CURRENT_VERSION; 
     onUpdaterPerformed(success, updateVersion , CURRENT_VERSION); 
    break; 
    } 
} 

Activity#startUpdate(File pAPK) { 
    perferences.putInt(UPDATE_VERSION, CURRENT_VERSION); 
    /*...*/ 
} 

Activity#onUpdaterPerformed(boolean pSuccess, int pFromVersion, int pToVersion) { 
    Toast.show("Update success: " + pSuccess); 
    /* e.g. migrate DB */ 
    /*...*/ 
} 
+0

事實上,我使用的是activity的startActivityForResult(),而不是來自我所在片段的那個。我已經完成了必要的更新,現在我在更新被取消時得到一個結果,但是當它成功時,它會關閉應用。感謝您的提示,非常有用! – r1k0 2013-03-13 09:00:34