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);

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

谢谢!

4

2 回答 2

1

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

于 2013-07-16T22:48:49.087 回答
1

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

setFlags(PackageManager.MATCH_DEFAULT_ONLY + 
PackageManager.GET_RESOLVED_FILTER);

这是我会这样做的方式:

setFlags(PackageManager.MATCH_DEFAULT_ONLY|
PackageManager.GET_RESOLVED_FILTER); 
于 2013-07-16T22:49:55.437 回答