【问题标题】:How to check the app was installed by apk or not如何检查应用程序是否由apk安装
【发布时间】:2018-04-03 05:19:02
【问题描述】:

我需要检查应用是通过 apk 还是从 google play 安装的。

我有一个 从 google play 下载的 apk,而且该应用在 google play 上可用。我想对两种情况进行分类。

我已经在下面阅读过这个问题,但它是关于应用程序是由哪个应用商店安装的,这不是我想要的。
How does android package manager know what to install from the market place web site?

是否有任何方法可以通过应用程序本身以编程方式检查应用程序是否由 apk 安装?任何帮助将不胜感激。

【问题讨论】:

    标签: android google-play


    【解决方案1】:
    String strCheck = getPackageManager()
                    .getInstallerPackageName(getPackageName());
    

    如果从 Play 商店安装应用程序,您将在 strCheck 中获得价值。

    安装包名称是

    谷歌游戏商店: com.android.vending

    从google play store安装,解压apk,再次安装:

    com.google.android.packageinstaller

    从 google play store 发布下载,App 发布列表:

    【讨论】:

    • 感谢您的回答,但我的问题是,该应用是从 google play 下载的。这意味着,在这两种情况下,我都可以获得相同的安装程序包名称。
    • 好的,让我看看...如果我有什么...我会告诉你的
    • 哦,你是对的。我测试了一些案例,并在您的答案中添加了详细信息。谢谢!
    【解决方案2】:

    试试这个

    PackageManager pm = getPackageManager();
    
    if(pm.getInstallerPackageName(getPackageName()).equals("com.android.vending"){
       //App is from google play
       //do something
    }
    

    来源不明的应用会返回空字符串

    【讨论】:

      【解决方案3】:

      我使用下面的代码来检查一个 apk 是从商店下载还是侧载:

      private boolean isStoreVersion(Context context) {
          boolean isStoreVersion= false;
      
          try {
              String installer = context.getPackageManager()
                                          .getInstallerPackageName(context.getPackageName());
              isStoreVersion= !TextUtils.isEmpty(installer);
          } catch (Throwable e) {      
                 e.printStackTrace();    
          }
      
          return isStoreVersion;
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-27
        • 2017-08-29
        • 2013-09-16
        • 2011-10-14
        • 1970-01-01
        相关资源
        最近更新 更多