Android 检测是否从Play store安装了应用程序

Android 检测是否从Play store安装了应用程序,android,Android,我想检查并允许使用我的应用程序,只要它是从Play store下载的,并且没有被其他用户或任何其他来源共享。如果尚未从Google Play store下载应用程序,我如何阻止用户使用该应用程序?此方法将检查您的应用程序是否已从Play store安装 boolean verifyInstallerId(Context context) { // A list with valid installers package name List<String> validI

我想检查并允许使用我的应用程序,只要它是从Play store下载的,并且没有被其他用户或任何其他来源共享。如果尚未从Google Play store下载应用程序,我如何阻止用户使用该应用程序?

此方法将检查您的应用程序是否已从Play store安装

boolean verifyInstallerId(Context context) {
    // A list with valid installers package name
    List<String> validInstallers = new ArrayList<>(Arrays.asList("com.android.vending", "com.google.android.feedback"));

    // The package name of the app that has installed your app
    final String installer = context.getPackageManager().getInstallerPackageName(context.getPackageName());

    // true if your app has been downloaded from Play Store 
    return installer != null && validInstallers.contains(installer);
}
布尔验证InstallerID(上下文){
//具有有效安装程序包名称的列表
List validInstallers=newarraylist(Arrays.asList(“com.android.vending”、“com.google.android.feedback”);
//已安装您的应用程序的程序包名称
最后一个字符串installer=context.getPackageManager().getInstallerPackageName(context.getPackageName());
//如果您的应用已从Play Store下载,则为true
返回安装程序!=null&&validInstallers.contains(安装程序);
}

几天前,我发布了一个Android库,它使用一些技术来保护你的应用程序,比如Google Play Licensing(LVL)、APK签名保护和安装程序ID(这一个)

com.android.vending
是play store软件包的名称

context.packageManager.getInstallerPackageName(context.packageName)
获取源程序包名称


其他来源,如华为应用程序库下载应用程序。但我不确定它的包名是什么

可能的重复项这仍然有效吗?当我的用户侧载我的应用程序时,我会向他们显示一个弹出窗口,其中一些用户抱怨说,即使他们通过playstore安装了应用程序,他们也会看到弹出窗口。如何检测该应用程序是从华为应用商店安装的?我仍然很少有用户报告此问题。使用相同的代码快照,除了添加
com.google.android.feedback
。软件包应用程序列表显示它与安装无关。有人处于同样的情况吗?但这不是一个很好的解决方案。请参阅华为AppGallery的网址:
com.Huawei.appmarket
。您可以通过以下方式验证应用程序:
adb shell pm list packages-i[软件包名称]