如何知道一个应用程序是安装从谷歌播放或侧载?

我需要检测我的应用程序是安装从谷歌播放或其他市场,我如何才能得到这些信息?

36502 次浏览

PackageManager类提供了 GetInstallerPackageName方法,该方法将告诉您安装了您指定的包的包名。侧面加载的应用程序将不包含值。

编辑 : Note@mttmllns’回答如下关于亚马逊应用程序商店。

顺便说一句,亚马逊商店的最新版本 很明显最终将 PackageManager.getInstallerPackageName()设置为 "com.amazon.venezia",以便与 Google Play 的 "com.android.vending"进行对比。

我使用这段代码来检查一个版本是从商店下载的还是侧载的:

public static boolean isStoreVersion(Context context) {
boolean result = false;


try {
String installer = context.getPackageManager()
.getInstallerPackageName(context.getPackageName());
result = !TextUtils.isEmpty(installer);
} catch (Throwable e) {
}


return result;
}

科特林:

  fun isStoreVersion(context: Context) =
try {
context.packageManager
.getInstallerPackageName(context.packageName)
.isNotEmpty()
} catch (e: Throwable) {
false
}

更新 :

特写现在在 Android 10或更高版本上已经过时了。

缺少分割的安装现在被阻止在已经激活或运行安卓10的设备上。


在比 Android 10更低的版本上遵循这一点

如果你正在寻找并限制侧面载入的应用程序。谷歌已经想出了解决方案来识别这个问题。

您可以按照下面的步骤进行操作

项目的 build.gradle:

buildscript {
dependencies {
classpath 'com.android.tools.build:bundletool:0.9.0'
}
}

应用程序模块的 build.gradle:

implementation 'com.google.android.play:core:1.6.1'

扩展应用程序的类:

public void onCreate() {
if (MissingSplitsManagerFactory.create(this).disableAppIfMissingRequiredSplits()) {
// Skip app initialization.
return;
}
super.onCreate();
.....

}

有了这个集成,谷歌将自动识别是否有任何缺失的分割应用程序,并显示一个弹出窗口说“ 安装失败”,它还重定向到播放商店下载屏幕,用户可以正确安装的应用程序通过谷歌播放商店。

查看这个 链接了解更多信息。

希望这个能帮上忙。