2013-02-27 70 views
2

當我從GCM獲取新數據時,有人可以向我展示站在流程後面的層次結構嗎?只發生在客戶端的過程。示例:首先,數據將進入CommonUtilities類中的displayMessage函數。秒將數據傳輸到GCMIntentService類中的onMessage函數,依此類推。我如何從gcm獲取數據?

謝謝!

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(); 
    } 
}; 

回答

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); 

到您的活動和登記y我們的廣播接收器,如:

registerReceiver(myReceiver, intentFilter); 

和Handler像這樣在你接收消息:

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

感謝您解答!我應該忽略那些不在MainActivity中發生的事情嗎?我只談論獲取信息的過程。這裏提到的意圖是從服務器獲取他的額外資源?不是從onMessage函數? – 2013-02-27 09:18:39

+0

要從GCM獲得消息,您必須創建一個擴展GCMBaseIntentService並覆蓋函數的服務。註冊設備後,您將收到使用該服務的消息,並根據該消息顯示您想要的任何內容,但不會在您的活動中收到消息。糾正我,如果我明白你錯了。 – hardartcore 2013-02-27 09:21:49

+0

我只說客戶端,並忽略服務器中發生的事情。我的問題是,如果我只通過onReceive函數獲取數據,或者數據首先通過另一個需要考慮的函數?我希望我能很好地解釋我的自我。 – 2013-02-27 09:37:40