有没有办法知道某个应用程序是从Amazon App Store还是从Google Play商店下载的?当然,我的意思是在应用程序内部。
我已经在两个网站上部署了一个应用程序,而我更愿意知道客户在应用程序中的下载位置。我知道,我可以为每个服务部署不同的应用程序,但这增加了一些维护工作,如果有一些方法可以使用相同的包在应用程序中使用条件来解决它。
答案 0 :(得分:14)
代码:
final PackageManager packageManager = getPackageManager();
try {
final ApplicationInfo applicationInfo = packageManager.getApplicationInfo(getPackageName(), 0);
if ("com.android.vending".equals(packageManager.getInstallerPackageName(applicationInfo.packageName))) {
// App was installed by Play Store
}
} catch (final NameNotFoundException e) {
e.printStackTrace();
}
“com.android.vending”告诉您它来自Google Play商店。我不确定亚马逊Appstore是什么,但使用上面的代码测试应该很容易。
通过亚行:
adb shell pm dump "PACKAGE_NAME" | grep "vending"
示例:的
adb shell pm dump "com.android.chrome" | grep "vending"
installerPackageName=com.android.vending
答案 1 :(得分:5)
虽然在大多数情况下,您可以通过包含类似于此的检查来获取商店名称:
final PackageManager packageManager = getPackageManager();
try {
final ApplicationInfo applicationInfo = packageManager.getApplicationInfo(getPackageName(), 0);
if ("com.android.vending".equals(packageManager.getInstallerPackageName(applicationInfo.packageName))) {
// App was installed by Play Store
} else if ("com.amazon.venezia".equals(packageManager.getInstallerPackageName(applicationInfo.packageName))) {
// App was installed by Amazon Appstore
} else {
// App was installed from somewhere else
}
} catch (final NameNotFoundException e) {
e.printStackTrace();
}
“com.android.vending”是Google Play商店和 “com.amazon.venezia”是亚马逊Appstore,和 当它被侧载时为null
然而,结果可能不可靠,例如在beta测试期间,商店可能不会设置此值,此外,可以侧载您的应用程序,指定可以解释为商店名称的安装程序包名称:
adb install -i <INSTALLER_PACKAGE_NAME> <PATH_TO_YOUR_APK>
您可能需要考虑为不同的商店设置不同的应用ID,例如Google的“com.example.yourapp”和亚马逊的“com.example.yourapp.amazon” - 您可以在Gradle脚本中轻松设置这些ID