68

我需要检测我的应用程序是从 google play 或其他市场安装的,我如何获得这些信息?

4

4 回答 4

59

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

编辑:请注意下面关于亚马逊应用商店的@mttmllns回答。

于 2012-05-30T03:03:27.260 回答
27

仅供参考,亚马逊商店的最新版本最终也将PackageManager.getInstallerPackageName()"com.amazon.venezia"Google Play 的"com.android.vending".

于 2013-05-31T17:43:18.417 回答
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;
}

科特林:

  fun isStoreVersion(context: Context) =
    try {
      context.packageManager
        .getInstallerPackageName(context.packageName)
        .isNotEmpty()
    } catch (e: Throwable) {
      false
    }
于 2014-07-23T09:15:31.770 回答
8

如果您正在寻找识别和限制侧载应用程序。谷歌已经提出了解决问题的解决方案。

您可以按照以下方式进行操作

项目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();
.....

}

通过这种集成,谷歌将自动识别是否缺少任何拆分 apk,并显示一个弹出窗口“安装失败”,它还会重定向到 Play 商店下载屏幕,用户可以通过 Google Play 商店正确安装该应用程序。

检查此链接以获取更多信息。

希望这可以帮助。

于 2019-06-25T05:17:25.970 回答