Невозможно определить, установлен ли Google Play Store на 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;
}
}
}
По какой-то причине после обновления я просто не могу найти имя пакета, чтобы указать, что приложение установлено, хотя оно находится на устройстве, и я могу получить доступ к рынку.
Изменено ли имя пакета? или, возможно, я смотрю на это неправильно?
Спасибо,
Адам.
UPDATE:
Это был глупый способ проверить, установлен ли пакет... лучший способ:
protected final boolean isPackageInstalled(String packageName) {
try {
application.getPackageManager().getPackageInfo(packageName, 0);
} catch (NameNotFoundException e) {
return false;
}
return true;
}
Ответы
Ответ 1
Имейте в виду, что этот почти 5-летний код не является оптимальным, и Google не нравится, когда вы проверяете все установленные пакеты без уважительной причины. Также проверьте другие ответы.
Изменено имя пакета, теперь он com.android.vending
Try:
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;
}
}
}
Ответ 2
GooglePlayServices имеет класс утилиты для обработки этого, а также предоставляет присвоенные диалоги ошибок для отображения в соответствии со статусом сервисов воспроизведения на устройстве.
Ссылка на API: http://developer.android.com/reference/com/google/android/gms/common/GooglePlayServicesUtil.html
Ответ 3
Как отметил Майкл в комментариях, Google Play Services не совпадает с 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;
}
}
Ответ 4
Используя этот код, вы можете проверить Службы Google Play на вашем устройстве или нет.
int val=GooglePlayServicesUtil.isGooglePlayServicesAvailable(MainActivity.this);
if(val==ConnectionResult.SUCCESS)
{
play_installed=true;
}
else
{
play_installed=false;
}
Ответ 5
В большинстве случаев мы хотим узнать, установлен ли 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.
}