Android 是否有任何方法可以查询特定类型的支持意向过滤器的应用程序?
我正在寻找一种方法,在设备中搜索所有能够通过“查看”和“可浏览”类别过滤意图的应用程序 我找到了以下链接,并学习了如何列出所有意图过滤器,但如何只列出那些只有上述参数的过滤器Android 是否有任何方法可以查询特定类型的支持意向过滤器的应用程序?,android,android-intent,Android,Android Intent,我正在寻找一种方法,在设备中搜索所有能够通过“查看”和“可浏览”类别过滤意图的应用程序 我找到了以下链接,并学习了如何列出所有意图过滤器,但如何只列出那些只有上述参数的过滤器 提前感谢此代码应该或多或少满足您的要求。主要问题是,我认为您不会发现任何过滤类别的活动可浏览,而不需要特定类型的数据。我在我的手机上尝试了它,直到我在Intent上添加了setData()调用,我才得到任何有用的东西 PackageManager manager = getPackageManager();
提前感谢此代码应该或多或少满足您的要求。主要问题是,我认为您不会发现任何过滤
类别的活动可浏览
,而不需要特定类型的数据。我在我的手机上尝试了它,直到我在Intent上添加了setData()
调用,我才得到任何有用的东西
PackageManager manager = getPackageManager();
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
// NOTE: Provide some data to help the Intent resolver
intent.setData(Uri.parse("http://www.google.com"));
// Query for all activities that match my filter and request that the filter used
// to match is returned in the ResolveInfo
List<ResolveInfo> infos = manager.queryIntentActivities (intent,
PackageManager.GET_RESOLVED_FILTER);
for (ResolveInfo info : infos) {
ActivityInfo activityInfo = info.activityInfo;
IntentFilter filter = info.filter;
if (filter != null && filter.hasAction(Intent.ACTION_VIEW) &&
filter.hasCategory(Intent.CATEGORY_BROWSABLE)) {
// This activity resolves my Intent with the filter I'm looking for
String activityPackageName = activityInfo.packageName;
String activityName = activityInfo.name;
System.out.println("Activity "+activityPackageName + "/" + activityName);
}
}
}
PackageManager=getPackageManager();
意图=新意图();
intent.setAction(intent.ACTION\u视图);
intent.addCategory(intent.CATEGORY可浏览);
//注意:提供一些数据以帮助Intent解析器
intent.setData(Uri.parse(“http://www.google.com"));
//查询与我的筛选器匹配的所有活动,并请求筛选器使用
//在ResolveInfo中返回要匹配的
List infos=manager.querytentActivities(意图,
PackageManager.GET_RESOLVED_FILTER);
for(ResolveInfo:infos){
ActivityInfo ActivityInfo=info.ActivityInfo;
IntentFilter filter=info.filter;
if(filter!=null&&filter.hasAction(Intent.ACTION\u视图)&&
filter.hasCategory(Intent.CATEGORY_可浏览)){
//此活动通过我正在寻找的筛选器解决了我的意图
字符串activityPackageName=activityInfo.packageName;
字符串activityName=activityInfo.name;
System.out.println(“活动”+activityPackageName+“/”+activityName);
}
}
}
你好,大卫。精彩片段!你的意思是用setData查询特定的MIME类型以找出特定的结果?到目前为止,我知道如果我通过setData()提供一个特定的URI,MIME类型将由Intent本身解析(我采用这种方法是为了避免在其他应用程序上使用fileChooser()。也许,这将是一段难看的代码,但也许我可以向setData()提供一个适当的虚拟URL作为常量,以帮助过滤准确性。某种丑陋的比较仪。我将根据您的代码片段进行尝试,稍后我会让您知道它是如何运行的。谢谢谢谢David,工作起来很有魅力,只需稍作调整(如果用户在设备中安装了某种应用程序,我只需要得到一个布尔值)。谢谢你的帮助!!!info.filter
东西不起作用。ActivityInfo对象中没有名为filter的字段。@miguelinfo。filter
指的是ResolveInfo
对象,而不是ActivityInfo
对象。