我如何从gcm获取数据?

时间:2013-02-27 09:01:17

标签: android eclipse google-cloud-messaging

当我从GCM获取新数据时,有人可以向我显示该流程背后的层次结构吗?只在客户端发生的过程。示例:首先,数据将转到CommonUtilities类中的displayMessage函数。秒将数据传输到GCMIntentService类中的onMessage函数,依此类推。

谢谢!

 private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String newMessage = intent.getExtras().getString(EXTRA_MESSAGE);
        // Waking up mobile if it is sleeping
        WakeLocker.acquire(getApplicationContext());

        // Showing received message
        lblMessage.append(newMessage + "\n");
        Toast.makeText(getApplicationContext(), "New Message: " + newMessage, Toast.LENGTH_LONG).show();

        // Releasing wake lock
        WakeLocker.release();
    }
};

1 个答案:

答案 0 :(得分:3)

如果注册设备并获取registrationId的所有流程都按原样通过,那么获取onMessage()中的数据应与此类似:

@Override
    protected void onMessage(Context arg0, Intent intent) {

            Log.d(TAG, "MESSAGE RECEIVED : "+intent.getExtras().toString());
            String action  = intent.getStringExtra("action");
            int extra = 0;
            try {
                    extra = Integer.parseInt(intent.getStringExtra("action_id"));
            } catch (Exception e){
                    /* ignore */
            }
            String message = intent.getStringExtra("message");
            generateNotification(getApplicationContext(), message, action, extra);
    }

当然,这是在我的应用程序中,您将用于获取正确数据的密钥取决于将服务器发送到客户端设备的数据类型。收到这部分数据后,您可以随意使用它,也可以创建通知并提醒用户该消息。

修改:

如果您想使用BroadcastReceiver在活动中显示某种消息,可以执行以下操作:收到消息后onMessage发送broadcastIntent

Intent intent = new Intent("messageReceived");
sendBroadcast(intent);

并添加

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(messageReceived);

到您的活动并注册您的广播接收器,如:

 registerReceiver(myReceiver, intentFilter);

并在接收器中处理消息,如下所示:

public void onReceive(Context context, Intent intent) {
    if(intent.getAction().equals("messageReceived")) {
         // Do your stuff here.
    }
 }