2011-05-27 84 views
4

在我的應用程序中,我從我的活動調用一個JavaScript界面​​。在與此界面相關的webview中,我要求用戶下載並安裝APK。我正在使用「startActivityForResult」來啓動安裝過程(下載文件後)。這裏是代碼:安裝APK以編程方式 - 返回值

Intent promptInstall = new Intent(Intent.ACTION_VIEW); 
     promptInstall.setDataAndType(Uri.fromFile(new File(PATH + "app.apk")), "application/vnd.android.package-archive"); 
     startActivityForResult(promptInstall, ACCEPT_INSTALL); 

我在主要活動類中使用「onActivityResult」來捕獲上述活動的返回值。下面是代碼:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    Log.d("requestCode, resultCode from Install APK: ", Integer.toString(requestCode) + ", " + Integer.toString(resultCode)); 
} 

我現在面臨的問題是,「resultCode爲」總是返回0,無論用戶是否選擇安裝應用程序或不安裝應用程序。我真的需要知道用戶是否安裝了應用程序。關於爲什麼返回值始終爲0的任何想法?

我的最後一招是使用packagemanager檢查在onActivityResult功能的應用程序的存在,以確定是否安裝或沒有應用程序,但我想知道爲什麼返回值始終爲0

非常感謝...

+1

我也面臨同樣的問題,這是可笑的 – tasomaniac 2012-06-07 15:41:54

回答

3

我們開發了一個應用程序市場,並面臨同樣的問題。我們的解決方案是按照您的建議使用數據包管理器。

我查看了一些意圖過濾器,因爲在安裝過程中似乎有一些意圖。但我們無法讓它運行。數據包管理器解決方案可以正常工作,因爲您可以檢查應用程序更新中重要的應用程序版本。

+0

謝謝你的迴應。我將最終使用PackageManager來檢查用戶是否安裝了應用程序。 – TheJag 2011-05-31 00:48:01

2

您可以檢查firstInstallTime/lastUpdateTime和您的要求的時間比較PackageInstaller用於安裝你的包,見下面的例子:

try { 

    PackageInfo installedPackageInfo = getPackageManager() 
      .getPackageInfo(installedPackageName, PackageManager.GET_ACTIVITIES); 
    long firstInstallTime = installedPackageInfo.firstInstallTime; 
    long lastUpdateTime = installedPackageInfo.lastUpdateTime; 

    // installationRequestTime is the time which you request for the PackageInstaller to install your package. This time should be got from System.currentTimeMillis() 
    return firstInstallTime > installationRequestTime || lastUpdateTime > installationRequestTime; 
} catch (PackageManager.NameNotFoundException e) { 
    // First time installation and user choose to not install the app 
    return false; 
} 

該解決方案是不漂亮,但不幸的是PackageInstaller唐我們沒有提供明確的結果代碼。