Я пытаюсь получить приложение по умолчанию / предпочитаемое для данного Intent
. Например, когда пользователь устанавливает второй веб-браузер, а затем пытается открыть URL, он или она получит диалоговое окно, подобное этому:
Если пользователь затем выбирает для этого действия Использовать по умолчанию , то диалоговое окно больше не открывается при нажатии URL-адреса.
Я работаю над приложением, которое должно знать, что это по умолчанию или предпочитаемое приложение / действие. Как мне это сделать? В настоящее время я использую код ниже, но getPreferredPackage
ничего не возвращает:
Intent i = (new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.google.com"));
PackageManager pm = context.getPackageManager();
final List<ResolveInfo> list = pm.queryIntentActivities(i, 0);
IntentFilter ifilter = new IntentFilter(i.getAction());
if (i.getCategories() != null) {
for(String category : i.getCategories()) {
ifilter.addCategory(category);
}
}
List<IntentFilter> filters = new ArrayList<IntentFilter>();
filters.add(ifilter);
List<ComponentName> preferredActivities = new ArrayList<ComponentName>();
pm.getPreferredActivities(filters, preferredActivities, null);
for (ComponentName activity : preferredActivities) {
for (ResolveInfo rinfo : list) {
if (rinfo.activityInfo.applicationInfo.packageName.equals(activity.getPackageName())) {
try {
final PackageInfo pi = pm.getPackageInfo(activity.getPackageName(), 0);
Toast.makeText(context, pm.getApplicationLabel(pi.applicationInfo), Toast.LENGTH_SHORT).show();
}
} catch (NameNotFoundException e) {
e.printStackTrace();
}
}
}
Что я делаю не так? Это даже правильный подход?