【问题标题】:resolution for intents with no action没有行动的意图的解决方案
【发布时间】:2013-07-16 22:12:00
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

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

    【讨论】:

    • 见我上面的评论。还有其他想法吗?
    【解决方案2】:

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

    setFlags(PackageManager.MATCH_DEFAULT_ONLY + 
    PackageManager.GET_RESOLVED_FILTER);
    

    我会这样做:

    setFlags(PackageManager.MATCH_DEFAULT_ONLY|
    PackageManager.GET_RESOLVED_FILTER); 
    

    【讨论】:

    • 结果是一样的。还有 (0x10000 + 0x40) == (0x10000 | 0x40)。
    • 检查source code 似乎只包含类别的意图未解析为任何过滤器。原帖中引用的 Android 文档似乎是错误的。
    猜你喜欢
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 2023-01-16
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    相关资源
    最近更新 更多