没有动作的意图的解决方案

时间:2013-07-16 22:12:00

标签: android android-intent

根据Android文档(http://developer.android.com/guide/components/intents-filters.html):“另一方面,只要过滤器包含至少一个操作,未指定操作的Intent对象会自动通过测试。” 并且“Intent对象中的每个类别都必须与过滤器中的类别匹配。过滤器可以列出其他类别,但不能省略intent中的任何类别。”

我有一个声明过滤器声明如下:

<intent-filter>
    <action android:name="my.custom.action" />                
    <category android:name="my.custom.category" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

根据上述规则,我希望使用以下代码返回此过滤器的父活动,但不是:

List<ResolveInfo> list = getPackageManager().queryIntentActivities(
    new Intent().addCategory("my.custom.category"), 
    PackageManager.MATCH_DEFAULT_ONLY + PackageManager.GET_RESOLVED_FILTER);

如果没有指定任何操作,意图解析会返回上面过滤器的活动吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

在您的示例中,主要问题出在PackageManager.MATCH_DEFAULT_ONLY + PackageManager.GET_RESOLVED_FILTER,您必须执行|(“按位或”)才能使其正常工作。我的意思是你必须写一些像PackageManager.MATCH_DEFAULT_ONLY | PackageManager.GET_RESOLVED_FILTER这样的东西。

答案 1 :(得分:1)

将两个标志与&#39; +&#39;一起添加。标志很可能是问题所在。

setFlags(PackageManager.MATCH_DEFAULT_ONLY + 
PackageManager.GET_RESOLVED_FILTER);

这是我这样做的方式:

setFlags(PackageManager.MATCH_DEFAULT_ONLY|
PackageManager.GET_RESOLVED_FILTER);