我正在尝试获取给定的默认/首选应用程序Intent
。例如,当用户安装第二个 Web 浏览器,然后尝试打开一个 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();
}
}
}
我究竟做错了什么?这甚至是正确的方法吗?