Проверьте, установлено ли приложение – Android

Я пытаюсь установить приложения из Google Play. Я могу понять, что при открытии URL-адреса магазина Google Play открывается Google Play, и когда я нажимаю кнопку «Назад», активность возобновляется.

Intent marketIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(appURL)); marketIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); startActivity(marketIntent); 

Когда я вернулся к активности, я попробовал позвонить в onResume() чтобы проверить, установлено ли приложение, но я получаю сообщение об ошибке:

 @Override protected void onResume() { super.onResume(); boolean installed = false; while (!installed) { installed = appInstalledOrNot(APPPACKAGE); if (installed) { Toast.makeText(this, "App installed", Toast.LENGTH_SHORT).show(); } } } private boolean appInstalledOrNot(String uri) { PackageManager pm = getPackageManager(); boolean app_installed = false; try { pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES); app_installed = true; } catch (PackageManager.NameNotFoundException e) { app_installed = false; } return app_installed ; } 

Ошибка заключается в следующем:

E / AndroidRuntime (796): java.lang.RuntimeException: не удается запустить Activity ComponentInfo {com.example.appinstaller / com.example.appinstaller.MainActivity}: android.content.ActivityNotFoundException: не найдено действий для обработки Intent {act = android .intent.action.VIEW dat = market: // details? Id = com.package.name flg = 0x40080000}

Я предполагаю, что это действие onPause() . Есть ли лучший способ его реализовать? Я пытаюсь проверить, завершено ли приложение.

Solutions Collecting From Web of "Проверьте, установлено ли приложение – Android"

Попробуй это:

 private boolean isPackageInstalled(String packagename, PackageManager packageManager) { try { packageManager.getPackageInfo(packagename, 0); return true; } catch (NameNotFoundException e) { return false; } } 

Он пытается получить информацию о пакете, имя которого вы передали. В противном случае, если было NameNotFoundException , это означает, что пакет с таким именем не установлен, поэтому мы возвращаем false .

Обратите внимание, что мы передаем PackageManager вместо Context , так что этот метод несколько более гибко применим и не нарушает закон Деметры . Вы можете использовать этот метод без доступа к экземпляру Context , если у вас есть экземпляр PackageManager .

Используйте его так:

 public void someMethod() { // ... PackageManager pm = context.getPackageManager(); boolean isInstalled = isPackageInstalled("com.somepackage.name", pm); // ... } 

Попробуй это:

 public static boolean isAvailable(Context ctx, Intent intent) { final PackageManager mgr = ctx.getPackageManager(); List<ResolveInfo> list = mgr.queryIntentActivities(intent,PackageManager.MATCH_DEFAULT_ONLY); return list.size() > 0; } 

Ответ Робин Кантер прав, но он проверяет установленные приложения, независимо от их включенного или отключенного состояния.

Мы все знаем, что приложение может быть установлено, но отключено пользователем, поэтому непригодным для использования.

Это проверяет установленные и поддерживаемые приложения:

 public static boolean isPackageInstalled(String packageName, PackageManager packageManager) { try { return packageManager.getApplicationInfo(packageName, 0).enabled; } catch (PackageManager.NameNotFoundException e) { return false; } } 

Вы можете поместить этот метод в класс, например Utils и вызвать его везде, используя:

 boolean isInstalled = Utils.isPackageInstalled("com.package.name", context.getPackageManager()) 
 @Override protected void onResume() { super.onResume(); boolean installed = false; while (!installed) { installed = appInstalledOrNot (APPPACKAGE); if (installed) { Toast.makeText(this, "App installed", Toast.LENGTH_SHORT).show (); } } } private boolean appInstalledOrNot (String uri) { PackageManager pm = getPackageManager(); boolean app_installed = false; try { pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES); app_installed = true; } catch (PackageManager.NameNotFoundException e) { app_installed = false; } return app_installed; }