这个意图过滤器中的类别是什么意思?

3

我一直不太明白意图过滤器中的类别到底是做什么用的,特别是在这种情况下。

       <intent-filter>

            <!-- Receives the actual messages. -->
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <!-- Receives the registration id. -->
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

            <category android:name="com.androidhive.pushnotifications" />
        </intent-filter>
2个回答

4
<category> 的作用是根据您的应用程序/包名称过滤传入的 GCM 通知。
GCM 文档显示 <category android:name="my_app_package" />,由于您必须注册特定的应用程序以允许 GCM,因此这是有道理的。
如果您考虑一下,可能会在 Android 设备上注册任意数量的应用程序以使用 GCM。它们都将使用相同的核心软件接收消息,这意味着必须有一种方法来“路由”消息到正确的应用程序 - 如果没有办法做到这一点,所有已注册的 GCM 应用程序都将接收到彼此的消息。

1

这些是Google Cloud Messaging服务使用的意图。有关这些过滤器的信息,请参阅CGM入门指南中的"编写Android应用程序"主题。以下是主要信息(特别是最后一部分):

此广播接收器负责处理GCM可以发送的2个意图(com.google.android.c2dm.intent.RECEIVEcom.google.android.c2dm.intent.REGISTRATION),应在清单中定义(而不是以编程方式),以便即使应用程序未运行,也可以接收到这些意图。通过设置com.google.android.c2dm.permission.SEND权限,您可以确保只有由GCM系统框架发送的意图被发送到接收器(常规应用程序无法使用该权限发出意图)。

请注意,类别标记中的android:name必须替换为您的应用程序包名称(对于针对minSdkVersion 16及更高版本的应用程序,不需要类别标记)。


这并没有回答他关于IntentFilter类别的问题。 - tolgap
1
@tolgap - 很好的建议。我加入了有关如何使用意图类别的相关部分文档。 - Ted Hopp
还是不明白,这个分类是干嘛用的? - Blake
1
@Blake - 类别有助于进一步限制与意图匹配的活动。这在主题意图和意图过滤器中有所描述。基本上,类别是:“包含有关应处理意图的组件类型的其他信息的字符串”。IntentFilter类别规则为:“如果意图中的所有类别与过滤器中给定的类别匹配,则类别匹配”。 - Ted Hopp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接