这很简单,只需检查设备上已安装的软件包即可...在将操作系统升级到2.3.5之前,可以使用以下代码找到Market / Play商店:

1
2
3
4
5
6
7
8
9
10
11
12
private static final String GooglePlayStorePackageName ="com.google.market";

void someMethod() {
    packageManager = getApplication().getPackageManager();
    List<PackageInfo> packages = packageManager.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
    for (PackageInfo packageInfo : packages) {
        if (packageInfo.packageName.equals(GooglePlayStorePackageName)) {
            googlePlayStoreInstalled = true;
            break;
        }
    }
}

由于更新后的某种原因,尽管它位于设备上,但我根本找不到要表示应用程序已安装的软件包名称,因此我可以进入市场。

包名称是否已更改? 还是我看错了方向?

谢谢,

亚当。

更新:

那是检查软件包是否已安装的愚蠢方法……更好的方法是:

1
2
3
4
5
6
7
8
protected final boolean isPackageInstalled(String packageName) {
    try {
        application.getPackageManager().getPackageInfo(packageName, 0);
    } catch (NameNotFoundException e) {
        return false;
    }
    return true;
}
  • 上面的代码工作得很好...谢谢

请注意,这将近5年的代码并不是最佳选择,并且在没有充分理由的情况下检查所有已安装的软件包时Google不会喜欢。请同时检查其他答案。

包名称已更改,现在为com.android.vending

尝试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
private static final String GooglePlayStorePackageNameOld ="com.google.market";
private static final String GooglePlayStorePackageNameNew ="com.android.vending";

void someMethod() {
    PackageManager packageManager = getApplication().getPackageManager();
    List<PackageInfo> packages = packageManager.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
    for (PackageInfo packageInfo : packages) {
        if (packageInfo.packageName.equals(GooglePlayStorePackageNameOld) ||
            packageInfo.packageName.equals(GooglePlayStorePackageNameNew)) {
            googlePlayStoreInstalled = true;
            break;
        }
    }
}
  • 这意味着现在我必须检查两个应用程序是否存在...嗯...不是很好!
  • 但是,为什么在getInstalledPackages()中使用标志PackageManager.GET_UNINSTALLED_PACKAGES而不是仅在getInstalledPackages(0)中使用呢?
  • 顺便说一下,不是"com.google.vending",而是"com.android.vending"。不确定旧名称。
  • 谢谢,有一条评论:packageManager的声明必须为:PackageManager packageManager,并且也要与Prizoff相同。
  • @Prizoff:您可以禁用Google Play商店应用。因此,尽管它不算在已安装的应用程序中,但当我们传递标记GET_UNINSTALLED_PACKAGES时,它将被拾取。
  • 那为什么不使用此方法context.getPackageManager() .getLaunchIntentForPackage("com.google.market") != null || context.getPackageManager() .getLaunchIntentForPackage("com.android.vending") != null)?它不需要您遍历所有软件包

GooglePlayServices具有一个实用程序类来处理此问题,并提供适当的错误对话框以根据设备中播放服务的状态显示。

API参考:http://developer.android.com/reference/com/google/android/gms/common/GooglePlayServicesUtil.html

  • 这是最近的事...我将在接下来的几天内对其进行测试...到目前为止,代码看起来像是一团糟!
  • 这的确是!但是,那是谷歌习惯做的:)
  • 请注意,开发人员不应混淆Google Play商店应用和Google Play服务。 GooglePlayServicesUtil.isGooglePlayServicesAvailable()检查后一项,这可能是一个指标,但不是必需条件。但是,该类的两个包名称都有常量。恕我直言,如果您要检查现有的Google Play商店应用(例如,因为您要启动market://意图,请使用PackageManager和GOOGLE_PLAY_STORE_PACKAGE。
  • 绝对。您要编辑我的评论以使其包含此内容吗?

正如迈克尔在评论中所述,Google Play服务与Google Play商店不同。使用此命令确定设备上是否安装了Play商店:

1
2
3
4
5
6
7
8
9
public static boolean isPlayStoreInstalled(Context context){
    try {
        context.getPackageManager()
                .getPackageInfo(GooglePlayServicesUtil.GOOGLE_PLAY_STORE_PACKAGE, 0);
        return true;
    } catch (PackageManager.NameNotFoundException e) {
        return false;
    }
}
  • 请注意,这要求您将com.google.android.gms:play-services-base:$playServicesVersion添加到依赖项。 (它不会对要安装的Play服务产生运行时依赖性。)
  • @Thomas,没有必要。您可以将GooglePlayServicesUtil.GOOGLE_PLAY_STORE_PACKAGE替换为" com.android.vending"

在大多数情况下,我们想了解是否已安装Google Play商店,并在预加载了某些应用程序页面的情况下启动它。

为什么我们不能这样做:

1
2
3
4
5
6
7
final String appPackageName = getPackageName(); // get your app package name
try {
    Uri uri = Uri.parse("market://details?id=" + appPackageName);
    startActivity(new Intent(Intent.ACTION_VIEW, uri));
} catch (android.content.ActivityNotFoundException anfe) {
    // Google Play Store is not available.
}

使用此代码,您可以检查设备上是否已安装Google Play服务。

1
2
3
4
5
6
7
8
9
int val=GooglePlayServicesUtil.isGooglePlayServicesAvailable(MainActivity.this);
            if(val==ConnectionResult.SUCCESS)
            {
                play_installed=true;
            }
            else
            {
                play_installed=false;
            }
  • Google Play服务!= Google Play商店。您可以安装商店,但不能安装GPS,反之亦然。 OP正在要求商店。