intent filter中的这个类别是什么意思?

时间:2012-11-18 23:37:10

标签: android android-intent categories

我总是没有得到类别在intent过滤器中真正做的事情,特别是在这种情况下。

       <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 个答案:

答案 0 :(得分:4)

<category>的要点是根据您的应用/包名称过滤传入的GCM通知。

GCM的文档显示<category android:name="my_app_package" />,因为您必须注册特定的应用以允许GCM,这是有道理的。

如果您考虑一下,Android设备上可能会有任意数量的已注册GCM的应用。事实上,他们都将使用相同的核心软件接收消息,这意味着必须有一些方法将消息“路由”到正确的应用程序 - 如果没有办法做到这一点,所有GCM注册的应用程序都会收到每个别人的消息。

答案 1 :(得分:1)

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

  

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

     

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