Android 如何检测是否安装了Google Play?(不是市场)

Android 如何检测是否安装了Google Play?(不是市场),android,google-play,Android,Google Play,无论安装的应用程序名为Google Play还是Market,软件包名称都是相同的com.android.vending 我需要能够检测应用程序是Google Play还是Market,我已经在PackageInfo中进行了检查,除了versionCode和versionName之外,没有任何东西可以提供帮助 有人知道Google Play应用程序的第一个versionCode是什么还是versionName 如果有人知道其他检测方法,请告诉我。我知道如何检查应用程序标签。我使用调试器来查看在p

无论安装的应用程序名为Google Play还是Market,软件包名称都是相同的
com.android.vending

我需要能够检测应用程序是Google Play还是Market,我已经在PackageInfo中进行了检查,除了
versionCode
versionName
之外,没有任何东西可以提供帮助

有人知道Google Play应用程序的第一个
versionCode
是什么还是
versionName


如果有人知道其他检测方法,请告诉我。

我知道如何检查应用程序标签。我使用调试器来查看在
packageInfo
中返回的所有内容,这就是我最初没有看到它的原因

public static boolean isGooglePlayInstalled(Context context) {
    PackageManager pm = context.getPackageManager();
    boolean app_installed = false;
    try
    {
           PackageInfo info = pm.getPackageInfo("com.android.vending", PackageManager.GET_ACTIVITIES);
           String label = (String) info.applicationInfo.loadLabel(pm);
           app_installed = (label != null && !label.equals("Market"));
    }
    catch (PackageManager.NameNotFoundException e)
    {
           app_installed = false;
    }
    return app_installed;
}

您还可以尝试此简化的解决方案:

public boolean isGooglePlayAvailable() {
        boolean googlePlayStoreInstalled;
        int val= GooglePlayServicesUtil.isGooglePlayServicesAvailable(LocationActivity.this);
        googlePlayStoreInstalled = val == ConnectionResult.SUCCESS;
        return googlePlayStoreInstalled;
    }

这可能是一个更好的示例,因为它允许“状态”,用户可以在该状态下对其执行某些操作,即重新验证或更新。根据中的代码:


您可以使用这段简单的代码,它简单明了,并考虑到不需要使用
GooglePlayServicesUtil
重新发明轮子:

public static boolean isPlayStoreInstalled(Context context){
try {
    context.getPackageManager()
            .getPackageInfo(GooglePlayServicesUtil.GOOGLE_PLAY_STORE_PACKAGE, 0);
    return true;
} catch (PackageManager.NameNotFoundException e) {
    return false;
}
}
这将要求您将其添加到依赖项中:

compile 'com.google.android.gms:play-services-base:[PLAY_SERVICES_VERSION]'

最新的
游戏服务
版本现在是:
10.0.1

在我的应用程序中,我检查是否有可能在启动游戏商店之前打开它,如下所示:

    public static boolean isResolveActivity(Intent intent) {
            return App.getInstance().getPackageManager().resolveActivity(intent, PackageManager.GET_RESOLVED_FILTER) != null;
        }

   public void isResolveActivity(String appPackage) {
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackage));

      if(isResolveActivity(intent)){
      ...open intent
      }
  }

我想你们在找。谢谢大家,我找到了答案:
packageInfo.applicationInfo.loadLabel(packageManager)
您知道
isAmazonMarketplaceInstalled
的等价物是什么吗?或者在亚马逊环境下,
label
的价值是什么?对不起,没有kindle,但如果你能找出应用程序包的名称,那就是你真正需要的。很可能是
com.amazon.
。我将编写一个快速测试,打印出所有与
com.amazon.*
匹配的软件包,并查看应用程序的软件包。好的,软件包名称很可能是
com.amazon.venezia
。这是不正确的。这会检查Google Play服务,而不是Google Play Store“应用程序”,以启动市场目标。这是不正确的。这是检查谷歌游戏服务,而不是谷歌游戏商店“应用程序”来启动市场目标。我想这是最好的答案
com.android.vending
以前是
com.google.store
,另一个答案取决于库。。。当我只想知道显示链接是否有意义时,在你的答案中“尝试”是最好的方法。
    public static boolean isResolveActivity(Intent intent) {
            return App.getInstance().getPackageManager().resolveActivity(intent, PackageManager.GET_RESOLVED_FILTER) != null;
        }

   public void isResolveActivity(String appPackage) {
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackage));

      if(isResolveActivity(intent)){
      ...open intent
      }
  }