类似的 Stackoverflow 问题有很多。
所有答案都建议在 PackageManager
类上使用 getInstallerPackageName
等方法。
所有人都有评论或相互矛盾的答案说这不是一种可靠的方法,建议可靠地检查哪个商店安装了给定应用程序的唯一方法是生成两个单独的二进制文件,每个二进制文件都有一个 storeFlag
设置并上传一个二进制文件到 Amazon,一个到 Google Play。
我需要知道应用程序的安装程序是哪个商店,以便我知道要与哪个商店通信以获得应用程序内购买功能。
100% 可靠生成两个独立二进制文件的确定方法是什么?或者是否有100% 可靠基于代码的运行时方法?
最佳答案
两个二进制文件将是最可靠的方法,但同时检查 Build.MANUFACTURER 和 installerName 应该让你非常接近(尽管假设如果用户在他们的安装程序上安装了旧版本的安装程序,你想检查 Amazon AppStore非 Kindle 设备且未更新 installerName 可能会报告 null)
boolean isAmazonDevice = Build.MANUFACTURER.equalsIgnoreCase("amazon");
final Application application = getApplication();
String installerName = application.getPackageManager().getInstallerPackageName(application.getPackageName());
boolean fromAmazonStore = installerName != null && installerName.equalsIgnoreCase("com.amazon.venezia");
然后检查以下值:
isAmazonDevice || fromAmazonStore
应该可以在很长一段时间内为您提供所需的东西。
这可能会造成混淆的一种情况是,如果您正在旁加载 apk 以进行测试 - 在这种情况下,它不会具有正确的 InstallerPackageName。您可以通过使用以下方法旁加载 apk 来伪造它:
adb install -i com.amazon.venezia APK_NAME
关于java - 是否可以在运行时可靠地检测哪个商店安装了 Android 应用程序(Google Play 或亚马逊市场)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19592927/