我需要检测我的应用是从谷歌播放或其他市场安装的,我怎么能得到这些信息?
答案 0 :(得分:50)
PackageManager
类提供getInstallerPackageName方法,该方法将告诉您安装指定包的任何内容的包名。侧载应用程序不包含值。
编辑:请注意关于亚马逊应用商店的@mttmllns'answer below。
答案 1 :(得分:24)
FYI apparently亚马逊商店的最新版本最终将PackageManager.getInstallerPackageName()
设置为"com.amazon.venezia"
,并与Google Play的"com.android.vending"
形成鲜明对比。
答案 2 :(得分:19)
我使用此代码检查构建是从商店下载还是侧载:
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;
}
答案 3 :(得分:1)
如果您要确定并限制侧面加载的应用。 Google已提出解决方案以识别问题。
您可以按照以下步骤操作
项目的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();
.....
}
通过这种集成,Google将自动识别是否缺少任何拆分的APK,并显示一个弹出窗口,提示“ 安装失败”,并且还会重定向到Play商店下载屏幕,用户可以在其中正确安装该应用通过Google Play商店。
选中此link以获取更多信息。
希望这会有所帮助。