2013-02-27 3 views
2

GCM에서 새 데이터를 받으면 프로세스 뒤에있는 계층 구조를 보여줄 수 있습니까? 클라이언트에서만 발생한 프로세스입니다. 예 : 먼저 데이터가 CommonUtilities 클래스의 displayMessage 함수에 전달됩니다. 초는 데이터를 GCMIntentService 클래스의 onMessage 함수에 전송하는 식입니다.어떻게 gcm에서 데이터를 가져 옵니까?

감사합니다. 그것이 있어야로 장치를 등록하고 registrationId을 받고 모든 과정 인 경우

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

은의 데이터를 받고, 통과하여 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); 

이 같은 수신기에 메시지 처리기 : 당신이 대답을

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

감사를! MainActivity에없는 모든 일들을 무시해야합니까? 나는 메시지를받는 과정에 대해서만 말하고있다. 여기서 언급 한 의도는 서버에서 그의 엑스트라를 얻는 것입니까? onMessage 함수가 아닌가요? –

+0

GCM에서 메시지를 얻으려면'GCMBaseIntentService'를 확장하고 함수를 재정의해야합니다. 장치를 등록하면 해당 서비스를 사용하여 메시지를 받게되며, 원하는대로 표시 할 수 있는지에 따라 활동에 메시지가 수신되지 않습니다. 내가 틀린 것을 이해하면 나를 정정하십시오. – hardartcore

+0

나는 클라이언트에서만 이야기하고 서버에서 어떤 일이 일어나는지 무시하고있다. 내 질문은 내가 onReceive 함수를 통해서만 데이터를 얻을 경우 또는 데이터가 먼저 고려해야 할 다른 기능을 통해가는 것입니다? 나는 내 자신을 잘 설명하기를 바랍니다. –

관련 문제