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>
4

2 回答 2

4

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

GCM 的文档显示<category android:name="my_app_package" />并且您必须注册特定的应用程序才能允许 GCM,这是有道理的。

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

于 2012-11-19T01:00:11.983 回答
1

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

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

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

于 2012-11-18T23:45:35.717 回答