2013-07-16 157 views
1

根据Android文档(http://developer.android.com/guide/components/intents-filters.html):“另一方面,没有指定动作的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); 

如果未指定任何操作,意向解析是否会返回带有上述过滤器的活动?

谢谢!

回答

1

在你的例子中,主要问题是在PackageManager.MATCH_DEFAULT_ONLY + PackageManager.GET_RESOLVED_FILTER,你必须做|(“按位或”)来使它工作。我的意思是你必须写这样的东西像PackageManager.MATCH_DEFAULT_ONLY | PackageManager.GET_RESOLVED_FILTER

+0

见上面我的意见。任何其他想法? – user2577593

1

将两个标志与'+'符号一起添加很可能是问题所在。

​​

这是我会做它,而不是方式:

setFlags(PackageManager.MATCH_DEFAULT_ONLY| 
PackageManager.GET_RESOLVED_FILTER); 
+1

结果是一样的。还(0x10000 + 0x40)==(0x10000 | 0x40)。 – user2577593

+0

检查[源代码](http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.3_r1/com/android/server/IntentResolver.java# IntentResolver.queryIntent%28android.content.Intent%2Cjava.lang.String%2Cboolean%29)似乎只包含类别的意图不解析为任何过滤器。在原帖中引用的Android文档似乎是错误的。 – user2577593

相关问题