【问题标题】:Android receiving a GCM message and put it in notificationAndroid 收到 GCM 消息并将其放入通知中
【发布时间】:2015-03-04 08:28:51
【问题描述】:

我在这里阅读了如何接收 GCM 消息:http://developer.android.com/google/gcm/client.html - 我说的是标题:接收下游消息。有一个说明:使用 WakefulBroadcastReceiver 不是必需的。如果您有一个不需要服务的相对简单的应用程序,您可以在常规 BroadcastReceiver 中拦截 GCM 消息并在那里进行处理。一旦你得到 GCM 传递给你的广播接收器的 onReceive() 方法的意图,你如何处理它取决于你。

当收到 GCM 消息时,我只想从中提取标题并将其放在通知区域中,这样当用户单击它时,它将打开带有特定片段的我的应用程序。当然,当该消息到达时,设备可能处于睡眠状态。

广播接收器示例是这样的:

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Explicitly specify that GcmIntentService will handle the intent.
        ComponentName comp = new ComponentName(context.getPackageName(),
                GcmIntentService.class.getName());
        // Start the service, keeping the device awake while it is launching.
        startWakefulService(context, (intent.setComponent(comp)));
        setResultCode(Activity.RESULT_OK);
    }
}

所以这里有几个问题:

1) 唤醒广播接收器只是为了防止设备进入睡眠状态,还是在消息到达时将其唤醒?

2) 我如何知道我需要的是普通广播接收器还是唤醒接收器?

3) 假设我有多个广播接收器,应用程序如何知道消息到达时使用哪个接收器?

4) 如果我只想提取标题并将其放在通知区域中,而不是调用使用广播接收器意图的意图服务,我应该只在广播接收器内部处理意图吗?

【问题讨论】:

    标签: android android-intent broadcastreceiver google-cloud-messaging notification-area


    【解决方案1】:

    1) 唤醒广播接收器仅用于防止设备 是去睡觉还是在消息到达时唤醒它?

    只是为了防止设备进入睡眠状态。

    2) 我如何知道我是否需要常规广播接收器或唤醒接收器 一个?

    如果你要做太多的工作,你需要使用intentService,因为接收器是在 UI 线程上调用的,如果你想让你的 CPU 在工作时保持活跃,请使用 wakeful。一般来说,当您从广播接收器调用服务时,在这种情况下不能保证您的 CPU 不会再次进入睡眠状态,因此请始终使用 wakeful

    3) 假设我有多个广播接收器,应用程序如何知道 消息到达时使用哪个?

    来自清单中接收者的意图过滤器:

        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="com.example" />
        </intent-filter>
    

    4) 而不是调用使用意图的意图服务 广播接收器,如果我只想提取标题并将其放入 通知区域,我应该只处理里面的意图 广播接收器本身?

    是的,您可以这样做,因为它不需要太多时间。并且保证在执行broadCastReciever.onRecive方法时CPU不会进入睡眠状态

    【讨论】:

    • 感谢您的详细回复。看了你的回复,我又看了一遍教程,现在我理解了很多。
    猜你喜欢
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多