我总是没有得到类别在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>
答案 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.RECEIVE
和com.google.android.c2dm.intent.REGISTRATION
)可以发送的2个意图,并且应该在清单中定义(而不是以编程方式),以便这些意图可以是即使应用程序没有运行,也会收到通过设置com.google.android.c2dm.permission.SEND
权限,您可以确保只将GCM系统框架发送的意图发送给接收方(常规应用程序无法发出具有该权限的意图)。请注意,类别标记中的android:name必须替换为应用程序的包名称(并且针对minSdkVersion 16及更高版本的应用程序不需要类别标记。)