Обнаружить приложение установлено или нет?
У меня есть приложение, которое регистрирует обработчик для пользовательского URI на телефоне. Я могу запустить приложение, сделав ссылку на "myapp://act/launch" с веб-страниц моего телефона. Это работает, только если мое приложение установлено на устройстве. Я хочу определить, поддерживается ли схема URI из браузера, а затем запросить мое собственное сообщение "Пожалуйста, скачайте приложение и т. Д.", Если обработчик для схемы URI не найден.
Есть ли способ, с помощью которого я могу определить или найти список обработчиков схемы URL на телефоне из веб-браузера?
3 ответа
Если вам когда-либо понадобится узнать, установлено ли определенное приложение на устройстве пользователя, вы можете использовать PackageManager. Из класса Context (например, Activity или Service) вы можете вызвать getPackageManager(). Это дает вам множество методов, одним из которых является getPackageInfo(). Ниже приведен метод, который вы можете использовать. Вы можете назвать это так:
isAppInstalled("com.simexusa.campusmaps_full");
private boolean isAppInstalled(String packageName) {
PackageManager pm = getPackageManager();
boolean installed = false;
try {
pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
installed = true;
} catch (PackageManager.NameNotFoundException e) {
installed = false;
}
return installed;
}
Вам нужно создать веб-страницу, на которую попадает пользователь, если приложение не установлено. Скажите, http://www.yourcompany.com/android/android_app_is_not_installed_landing_page.html
Приложению необходимо зарегистрировать хост XML-файла манифеста www.yourcompany.com, схему "http" и указать путь к приложению, чтобы не устанавливать целевую страницу в фильтре намерений манифеста:
<!-- These intents are used to launch the app from the web page--> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" android:host="www.yourcompany.com" android:path="/android/android_app_is_not_installed_landing_page.html" /> </intent-filter>
Теперь на веб-странице, которая вызывает ваше приложение, вы указываете полную ссылку на android_app_is_not_installed_landing_page.html, за которой следуют любые параметры, которые вы хотите передать приложению:
http://www.yourcompany.com/android/ android_app_is_not_installed_landing_page.html? '> Нажмите здесь, чтобы запустить приложение, если оно установлено
Если приложение установлено, оно будет запущено и передано полностью http://www.yourcompany.com/android/android_app_is_not_installed_landing_page.html? ' с намерением проанализировать, извлечь и сделать все, что должен.
Если приложение не установлено, веб-браузер Android откроет целевую страницу "Приложение Android не установлено" http://www.yourcompany.com/android/android_app_is_not_installed_landing_page.html o. На этой странице должно появиться сообщение пользователю, чтобы установить приложение, и предоставить ссылку для его установки с Android Marketplace.
нашел это написать здесь: https://groups.google.com/forum/m/?fromgroups
В моем обычае Helper.java
public static boolean isPackageInstalled(Context context, String packageName)
{
PackageManager pm = context.getPackageManager();
try {
pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
return true;
} catch (PackageManager.NameNotFoundException e) {
Log.d("Tag",packageName + " not installed");
}
return false;
}
Позвони
Helper.isPackageInstalled(yourActivity.this,"app_package_name")
Хотя принятый ответ правильный, но те, кто ищет решение Kotlin, могут использовать этот метод,
Здесь я написал статью. Проверьте, установлено ли приложение в Android Kotlin
fun isAppInstalled(packageName: String, context: Context): Boolean {
return try {
val packageManager = context.packageManager
packageManager.getPackageInfo(packageName, 0)
true
} catch (e: PackageManager.NameNotFoundException) {
false
}
}