我计划在亚马逊应用商店和Google Play上发布我的应用程序,并在我的应用程序中包含一些需要根据应用程序是否从亚马逊应用程序商店安装而稍有不同的行为。如果我正确理解了PackageManager.getInstallerPackageName(String packageName)
方法,它会告诉我安装我的应用程序的应用程序的名称。对吗?如果是这样,有谁知道如果我的应用是从亚马逊应用商店安装的,这个方法的返回值是多少?如果不是,有谁知道我可以使用其他方法来确定我的应用程序是否是从亚马逊应用程序商店安装的?
注意:我知道关于堆栈溢出的其他问题已经得到了回答,这些问题提到了使用
PackageManager.getInstallerPackageName(String packageName)
来确定安装我的应用程序的应用程序的名称。然而,搜索Stack Overflow和其他地方,我还无法确定如果应用程序是从亚马逊应用程序商店安装的,PackageManager.getInstallerPackageName(String packageName)
返回的值是多少。
发布于 2012-11-09 00:41:43
调用PackageManager.getInstallerPackageName(myPackageName)
,其中myPackageName
是程序包的名称(您要确定其安装程序的应用程序的名称)会提供以下值:
如果应用程序是从亚马逊应用程序安装的,则为
null
。如果应用程序是直接安装在任何应用程序store.com.android.vending
之外的,则为null
。(感谢@CommonsWare的指针。)
发布于 2014-05-23 05:37:08
由于三星尚未实现PackageManager.getInstallerPackageName(),因此它仍然返回null。因此,使用PackageManager.getInstalledPackages()获取所有包并搜索samsungapp包名称"com.sec.android.app.samsungapps“。
商店:
null - developer
com.android.vending - google play
com.amazon.venezia - amazon app
com.sec.android.app.samsungapps - samsung app store
代码:
// lets start with google play store link
String link = "https://play.google.com/store/apps/details?id=com.hellothupten.capital2countryquiz";
//find out the installer for your app package name.
String installer = getPackageManager().getInstallerPackageName(
"com.hellothupten.capital2countryquiz");
if (installer == null) {
List<PackageInfo> installedPackages = getPackageManager()
.getInstalledPackages(PackageManager.GET_ACTIVITIES);
for (PackageInfo p : installedPackages) {
if (p.packageName.contains("samsungapps")) {
// change to samsung app store link
link = "http://apps.samsung.com/mars/topApps/topAppsDetail.as?productId=000000840239";
break;
}
}
} else if (installer.contains("amazon")) {
// change to amazon app store link
link = "amzn://apps/android?p=com.hellothupten.capital2countryquiz";
} else if (installer.contains("samsung")) {
// change to samsung app store link. This does not
// exist..but who knows samsung may implement
// getInstallerPackageName in future, I assume it will
// contain a word samsung in its package name.
link = "http://apps.samsung.com/mars/topApps/topAppsDetail.as?productId=000000840239";
}
使用链接变量作为存储链接。
更新:
samsungapps://ProductDetail/com.sec.chaton
三星:http://developer.samsung.com/android/technical-docs/Samsung-Apps-Deeplink-Guide
发布于 2013-06-01 01:39:58
好消息!亚马逊商店的最新版本Apparently终于将PackageManager.getInstallerPackageName()
设置为"com.amazon.venezia"
,与谷歌Play的"com.android.vending"
形成对比。
旧的应用程序仍然会返回null
,我还没有实际验证这个应用程序接口,或者安装新的应用商店,然后升级一个旧的应用程序是否会设置安装程序。但安装新的应用程序并检查/data/system/packages.xml
表明installer
设置正确。
https://stackoverflow.com/questions/13289748
复制相似问题