GcmBroadcastReceiver - GcmListenerService

时间:2016-06-12 23:06:40

标签: google-cloud-messaging broadcastreceiver

有人可以向我解释GCM接收器在以下示例中的工作原理。设置为

gcm_receiver name = "com.google.android.gms.gcm.GcmReceiver"

在我的包类别中,我实现了什么?是否意味着从GCM接收器接收GCM消息(不编写任何代码)并将其发送到我的应用程序,我的GCM监听器接收它们?

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="gcm.play.android.samples.com.gcmquickstart" >

    <uses-permission android:name="android.permission.INTERNET" />
    <!-- [START gcm_permission] -->
    <permission android:name="gcm.play.android.samples.com.gcmquickstart.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />
    <uses-permission android:name="gcm.play.android.samples.com.gcmquickstart.permission.C2D_MESSAGE" />
    <!-- [END gcm_permission] -->

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- [START gcm_receiver] -->
        <receiver
            android:name="com.google.android.gms.gcm.GcmReceiver"
            android:exported="true"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                <category android:name="gcm.play.android.samples.com.gcmquickstart" />
            </intent-filter>
        </receiver>
        <!-- [END gcm_receiver] -->

        <!-- [START gcm_listener] -->
        <service
            android:name="gcm.play.android.samples.com.gcmquickstart.MyGcmListenerService"
            android:exported="false" >
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            </intent-filter>
        </service>
        <!-- [END gcm_listener] -->
        <!-- [START instanceId_listener] -->
        <service
            android:name="gcm.play.android.samples.com.gcmquickstart.MyInstanceIDListenerService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.android.gms.iid.InstanceID"/>
            </intent-filter>
        </service>
        <!-- [END instanceId_listener] -->
        <service
            android:name=".RegistrationIntentService"
            android:exported="false">
        </service>
    </application>

</manifest>

1 个答案:

答案 0 :(得分:0)

com.google.android.gms.gcm开始,GcmReceiver被描述为WakefulBroadcastReceiver,它接收GCM消息并将其传递给特定于应用程序的GcmListenerService子类。

同样,正如在Set up a GCM Client App on Android中所讨论的,在编辑应用程序的清单时:

  • GcmReceiver处理从GCM发送到您的应用程序的消息。
  • GcmListenerService支持处理消息的各个方面,例如检测不同的下游消息类型,确定上游发送状态,以及代表应用程序自动显示简单通知。
  • InstanceIDListenerService处理注册令牌的创建,轮换和更新。

查看文档有助于您了解GCM Client App在Android上的运作方式。