2

当我从 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();
    }
};
4

1 回答 1

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.
    }
 }
于 2013-02-27T09:08:15.220 回答