2013-01-19 39 views
3

如果應用程序是通過Amazon Android Appstore或Google Play安裝的,那麼在運行時確定何種建議最佳實踐?我想避免爲我的應用程序可用的每個appstore生成單獨的APK。如何在運行時確定是否通過亞馬遜app store或Google play安裝應用程序

我的首選方法是使用PackageManger.getInstallerPackageName。

根據Android API文檔,這正是我正在尋找的內容: 檢索安裝軟件包的應用程序的軟件包名稱。這標識了該軟件包來自哪個市場。

不幸的是,似乎通過亞馬遜Appstore(包括KF)安裝的應用程序返回null,這是人們只有在用戶手動安裝APK時纔會發生的情況。

有人可以讓我知道,如果有另一種方法這樣做。

回答

4

除了返回null的問題,getInstallerPackageName()可能會被篡改並返回不準確的信息。

我已經看過這個很長一段時間,我能想出的最好的解決辦法是有一個包含該信息的常量文件:

public class Constants { 

    public static final int GOOGLE_PLAY = 0; 
    public static final int AMAZON = 1; 
    public static final int BUILT_FOR = GOOGLE_PLAY; 
} 

在該文件只使用AMAZON,而不是GOOGLE_PLAY併爲每個應用商店構建一次apk。

其他地方在你的代碼,你可以通過檢查:

if(Constants.BUILT_FOR == Constants.GOOGLE_PLAY) { 
    //Google Play build 
} 

if(Constants.BUILT_FOR == Constants.AMAZON) { 
    //Amazon Build 
} 
+0

謝謝。我會試試這個。 – user1980076

+0

它怎麼會被篡改?類似的問題可以在這裏找到:http://stackoverflow.com/questions/12593621,它提到setInstallerPackageName可能導致安全異常。 – giannileuani

+0

沒有真正回答這個問題,問題是關於這樣做,而沒有2個。 – mbonnin

相關問題