无法确定Android设备上是否安装了Google Play商店

Tac*_*0sS 17 android google-play

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

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

由于某些原因在更新后,我根本无法找到包名称来指示应用程序已安装,虽然它在设备上,我可以访问市场.

包名称是否已更改?或者我正在以错误的方式看待这个?

谢谢,

亚当.

更新:

这是检查包是否安装的愚蠢方法...更好的方法是:

protected final boolean isPackageInstalled(String packageName) {
    try {
        application.getPackageManager().getPackageInfo(packageName, 0);
    } catch (NameNotFoundException e) {
        return false;
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

Sco*_*ris 31

请注意,这个差不多5年的代码并不是最佳的,当您检查所有已安装的软件包时,Google并不喜欢这种代码.请检查其他答案.

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


尝试:

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

  • 顺便说一句,不是"com.google.vending"`,而是"com.android.vending"`.关于旧名称不确定. (6认同)
  • 但是为什么在`getInstalledPackages()`中使用标志`PackageManager.GET_UNINSTALLED_PACKAGES`而不仅仅是`getInstalledPackages(0)`? (2认同)

sai*_*der 9

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

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

  • 请注意,开发者不应混淆Google Play商店应用和Google Play服务.GooglePlayServicesUtil.isGooglePlayServicesAvailable()会检查后者,这可能是一个指标,但不是必需品.但是,该类具有两个包名称的常量.恕我直言,如果您想检查现有的Google Play商店应用(例如,因为您想要启动市场:// intent,请使用带有GOOGLE_PLAY_STORE_PACKAGE的PackageManager. (6认同)

MrM*_*fen 6

正如迈克尔在评论中所述,Google Play服务与Google Play商店不同.使用此选项可确定您的设备上是否安装了Play商店:

public static boolean isPlayStoreInstalled(Context context){
    try {
        context.getPackageManager()
                .getPackageInfo(GooglePlayServicesUtil.GOOGLE_PLAY_STORE_PACKAGE, 0);
        return true;
    } catch (PackageManager.NameNotFoundException e) {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)