在我的一個用例中,開始時的應用程序聯繫服務器並下載相同應用程序的更新。以編程方式安裝在棉花糖上的APK安裝
對於下載,我正在使用Android的DownloadManager類。 然後使用以下代碼嘗試在onReceive()
中創建應用安裝程序意圖,即在APK成功下載之後。
@Override
public void onReceive(Context context, Intent intent) {
//check if the broadcast message is for our Enqueued download
long referenceId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if (downloadReference == referenceId) {
try {
Log.v("", "Downloading of the new app version complete");
String filepath = Environment.getExternalStorageDirectory() + "/" +
Environment.DIRECTORY_DOWNLOADS + "/" + mLatestVersionFileName;
//start the installation of the latest version
Uri uri = downloadManager.getUriForDownloadedFile(downloadReference);
//downloadManager.getUriForDownloadedFile(downloadReference)
Uri fileLoc = Uri.fromFile(new File(filepath));
Intent promptInstall = new Intent(Intent.ACTION_VIEW);
promptInstall.setDataAndType(uri, "application/vnd.android.package-archive");
promptInstall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(promptInstall);
} catch (Exception e) {
e.printStackTrace();
}
}
}
該代碼適用於前棉花糖設備和用戶獲取屏幕安裝APK。
這不適用於棉花糖設備。
我得到以下的棉花糖例外:
android.content.ActivityNotFoundException:無活動處理意向{行動= android.intent.action.VIEW DAT =內容://下載/ my_downloads/287典型應用=/vnd.android.package歸檔FLG = 0x10000000的}
我曾嘗試以下操作:
- 使用三月的確切PackageInstaller shmallow
(com.google.android.packageinstaller/com.android.packageinstaller.PackageInstallerActivity)
組件名稱作爲Intent的一部分。 - 傳遞fileLoc而不是uri。
promptInstall.setDataAndType(uri, "application/vnd.android.package-archive");
這將導致 '解析錯誤'。
理想的意圖是由Android操作系統解決。我想這不是一個大問題,我可能在創建Intent的時候錯過了一些東西。