3

在运行时确定应用程序是通过 Amazon Android Appstore 还是 Google play 安装的推荐最佳实践是什么?我想避免为我的应用可用的每个应用商店生成单独的 APK。

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

根据 Android API 文档,这正是我正在寻找的:检索安装包的应用程序的包名。这确定了包裹来自哪个市场。

不幸的是,通过 Amazon Appstore(包括 KF)安装的应用程序似乎返回 null,这只有在用户手动安装 APK 时才会出现。

有人可以让我知道是否有其他方法可以这样做。

4

1 回答 1

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
}
于 2013-01-19T11:43:13.070 回答