Пытаюсь установить приложения из 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: не удалось запустить действие ComponentInfo {com.example.appinstaller / com.example.appinstaller.MainActivity}: android.content.ActivityNotFoundException: не обнаружено действие для обработки намерения {act = android .intent.action.VIEW dat = market: // подробности? id = com.package.name flg = 0x40080000}
Думаю, активность есть onPause()
. Есть ли лучший способ реализовать это? Я пытаюсь проверить, завершена ли установка приложения.
источник
Ответы:
Попробуй это:
Он пытается получить информацию о пакете, имя которого вы передали. В противном случае, если
NameNotFoundException
был сгенерирован a , это означает, что пакет с таким именем не установлен, поэтому мы возвращаемсяfalse
.Обратите внимание, что мы передаем a
PackageManager
вместо aContext
, так что метод немного более гибок в использовании и не нарушает закон Деметры . Вы можете использовать метод без доступа кContext
экземпляру, если у вас естьPackageManager
экземпляр.Используйте это так:
источник
Ответ Робина Кантерса правильный, но он проверяет наличие установленных приложений независимо от их включенного или отключенного состояния.
Все мы знаем, что приложение может быть установлено, но отключено пользователем, поэтому его нельзя использовать.
Это проверяет наличие установленных И включенных приложений:
Вы можете поместить этот метод в класс вроде
Utils
и вызывать его везде, используя:источник
Попробуй это:
источник
Более быстрое решение:
getPackageGids
дешевле отgetPackageInfo
, поэтому работает быстрее.Примечание: это не будет работать в некоторых виртуальных пространствах. Они могут нарушать Android API и всегда возвращать массив, даже если нет приложения с таким именем пакета.
В этом случае используйте
getPackageInfo
.источник
источник
// метод проверки установленного пакета true / false
источник
Если вы хотите попробовать его без блока try catch, вы можете использовать следующий метод: создать намерение и установить пакет приложения, которое вы хотите проверить.
и вызовите следующий метод, чтобы проверить, установлено ли приложение
источник
Те, кто ищет решение Kotlin, могут использовать этот метод,
Здесь я поделился полным кодом, а также обработал статус включения. Проверьте, установлено ли приложение в Android Kotlin
источник
источник