如何知道从谷歌播放或侧载加载应用程序?

tto*_*tom 54 android google-play sideloading

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

Mat*_*ttC 52

PackageManager类提供的getInstallerPackageName方法,将告诉你的任何安装指定的软件包的名称.侧载应用程序不包含值.

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

  • @AbhishekB我不知道如何找到侧载应用程序的起源.我不确定如何跟踪它,因为从技术上来说它只是一个APK文件加载到某个地方的设备上,然后可能通过PackageManager安装. (3认同)

mtt*_*lns 25

和FYI 显然亚马逊商店的最新版本终于将PackageManager.getInstallerPackageName()"com.amazon.venezia",以及与谷歌Play的对比"com.android.vending".


Phi*_* E. 18

如果从商店或侧载下载构建,我使用此代码进行检查:

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;
}
Run Code Online (Sandbox Code Playgroud)

  • 可能不是一个可靠的解决方案。请参阅/sf/answers/2540974201/ (2认同)

Nav*_*T P 8

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

你可以按照以下

项目build.gradle

buildscript {
 dependencies {
  classpath 'com.android.tools.build:bundletool:0.9.0'
 }
}
Run Code Online (Sandbox Code Playgroud)

应用模块的build.gradle

implementation 'com.google.android.play:core:1.6.1'
Run Code Online (Sandbox Code Playgroud)

扩展应用程序的类:

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

}

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

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

希望这可以帮助。

  • 这不再可用。Google 已删除这些 API。检查这个:/sf/ask/4236700331/ (3认同)