我计划在Amazon应用商店和Google Play上发布我的应用,并且我的应用中的一些内容需要根据应用是否从Amazon应用商店安装而略有不同。如果我正确理解了PackageManager.getInstallerPackageName(String packageName)
方法,它会告诉我安装我的应用的应用名称。对吗?如果是,如果我的应用程序是从Amazon应用程序商店安装的,那么有没有人知道这个方法返回的值是什么?如果没有,有没有人知道我可以使用其他方法来确定我的应用程序是否是从Amazon应用程序商店安装的?
**注:**我知道Stack Overflow上的其他问题,这些问题的答案暗示使用PackageManager.getInstallerPackageName(String packageName)
来确定安装我的应用程序的应用程序名称。但是,在搜索Stack Overflow和其他地方时,我无法确定如果应用程序是从Amazon应用程序商店安装的,PackageManager.getInstallerPackageName(String packageName)
返回的 value 是什么。
4条答案
按热度按时间uwopmtnx1#
由于三星没有实现PackageManager. getInstallerPackageName(),所以它仍然返回null,所以使用PackageManager. getInstalledPackages()获取所有软件包,并搜索三星应用程序软件包名称"com. sec. android. app. samsungapps"。
存储:
代码:
使用link变量作为商店链接。
三星:http://developer.samsung.com/android/technical-docs/Samsung-Apps-Deeplink-Guide
oxcyiej72#
好消息!亚马逊商店的最新版本Apparently终于将
PackageManager.getInstallerPackageName()
设置为"com.amazon.venezia"
,以与Google Play的"com.android.vending"
形成对比。旧版应用仍然会返回
null
,我还没有实际验证API,也没有验证安装新应用商店然后升级旧版应用是否会设置安装程序。但安装新应用并检查/data/system/packages.xml
表明installer
设置正确。gz5pxeao3#
调用
PackageManager.getInstallerPackageName(myPackageName)
,其中myPackageName
是包的名称(您希望确定其安装程序的应用的名称),可获得以下值:null
(如果应用程序是从Amazon应用程序商店安装的null
(如果应用是在任何应用商店之外 * 直接 * 安装的)。com.android.vending
(如果应用是从Google Play安装的)。(谢谢@CommonsWare的指点。)
pw136qt24#
您正在尝试确定您自己的应用程序是否已从Amazon商店安装,因此以下内容适用于该情况。但自从您提出这个问题后,情况发生了变化,所以这个答案在发布时的2016年有效,而不是2012年。
如前所述,在2013年中期之前发布的亚马逊安装程序版本中,当getInstallerPackageName()方法被传递已安装应用的软件包名称时,该方法会返回null。但在那之后,他们开始为此类调用返回“com.amazon.venezia”。最近,亚马逊地下应用可能会分配第二个安装程序软件包名称com.amazon.mshop.android。
因此,如果您认为自己可能会遇到这些旧版本的安装程序,这并不是一个完全可靠的指标,因为简单的侧载应用(从本地存储中的APK安装)在针对其软件包调用getInstallerPackageName()方法时,通常也会从该方法返回null,因此无法与这些旧版亚马逊商店应用之一安装的应用区分开来。
尽管存在此问题,但如果您仍希望使用此方法,但又希望避免对具有较旧安装程序版本的设备产生将安装程序标记为空的误报,则可以尝试以下操作: