Не удается определить, установлен ли магазин Google Play на устройстве Android

Это был простой вопрос проверки установленных пакетов на устройстве... перед тем, как я обновил свою ОС до 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;
        }
    }
}

По какой-то причине после обновления я просто не могу найти имя пакета, чтобы указать, что приложение установлено, хотя оно находится на устройстве, и я могу получить доступ к рынку.

Название пакета изменилось? или, может быть, я смотрю на это неправильно?

Спасибо,

Адам.

ОБНОВИТЬ:

Это был глупый способ проверить, установлен ли пакет... лучший способ:

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

6 ответов

Решение

Имейте в виду, что этот почти 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;
        }
    }
}

GooglePlayServices имеет служебный класс для обработки этого, а также предоставляет соответствующие диалоговые окна с сообщениями об ошибках, которые отображаются в соответствии с состоянием сервисов воспроизведения на устройстве.

Справочник по API: http://developer.android.com/reference/com/google/android/gms/common/GooglePlayServicesUtil.html

Как заявил Майкл в комментариях, сервисы Google Play отличаются от Google Play Store. Используйте это, чтобы определить, установлен ли Play Store на вашем устройстве:

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

В большинстве случаев мы хотим выяснить, установлен ли Google Play Store или нет, чтобы запустить его с предварительно загруженной страницей приложения.

Почему мы не можем сделать это:

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 на вашем устройстве или нет.

int val=GooglePlayServicesUtil.isGooglePlayServicesAvailable(MainActivity.this);
            if(val==ConnectionResult.SUCCESS)
            {
                play_installed=true;
            }
            else
            {
                play_installed=false;
            }

Чтобы проверить, установлен и активирован ли Google Play Store:

Котлин

      companion object {
    private const val GOOGLE_PLAY_STORE_PACKAGE = "com.android.vending"
}

private fun isPlayStoreInstalled(context: Context): Boolean {
    return try {
        val packageInfo = context.packageManager.getPackageInfo(GOOGLE_PLAY_STORE_PACKAGE, 0)
        packageInfo.applicationInfo.enabled
    } catch (exc: PackageManager.NameNotFoundException) {
        false
    }
}

Джава

         private static final String GOOGLE_PLAY_STORE_PACKAGE = "com.android.vending";

   private final boolean isPlayStoreInstalled(Context context) {
      boolean flag;
      try {
         PackageInfo packageInfo = context.getPackageManager().getPackageInfo(GOOGLE_PLAY_STORE_PACKAGE, 0);
         flag = packageInfo.applicationInfo.enabled;
      } catch (PackageManager.NameNotFoundException exc) {
         flag = false;
      }
      return flag;
   }
Другие вопросы по тегам