2013-10-22 6 views
0

내 응용 프로그램에 GCM에 대해 2 개의 수신기와 2 개의 GCMIntentService 클래스가 있습니다. 하나는 내 앱 안에 있고 다른 하나는 내 애플리케이션에 추가 한 라이브러리에 포함되어 있습니다. 메시지가 GCM을 통해 수신되면, 나는 어떤 메시지가 의도 된 인 텐트 서비스를 식별하고 올바른 수신자가 처리하도록하는 방법을 원할 것이다. 어떤 사람은 here에게 다음 수신자에게 결과를 전달할 것을 제안했지만, 그 사람이 내 의도가 아니라면 그 일을 처리 할 수 ​​없었습니다. 어떤 사람이 저를 도울 수 있다면 정말 감사 할 것입니다.android에있는 다음 BroadcastReceiver에 결과를 전파하십시오.

+0

나는 그 제안을 썼다. 정확히 당신에게 효과가없는 것은 무엇입니까? 우선 순위를 사용하여 어떤 수신자가 먼저 호출되는지 결정할 수 있으며 송신자 ID를 사용하여 메시지가 특정 수신자를위한 것인지 여부를 알 수 있습니다. – Eran

+0

응답 해 주셔서 감사합니다. 예, 어떤 리시버가 의도되었는지는 알 수 있지만 다른 리시버로 결과를 전달하는 방법을 알지 못합니다. –

+0

수신자에 대한 메시지를 식별하기 위해 메시지와 함께 식별자 문자열을 보내고 GCMIntentService onMessage() 메소드 내에 수신 된 메시지에 해당 문자열이 포함되어 있는지 확인합니다. 그게 올바른 접근인지 확실하지 않습니다. 이런 뜻 이었니? 그렇지 않다면, 이것을 처리 할 수있는 정확한 위치는 무엇입니까. 사용자 정의 GCMBroadcastReceiver를 정의해야합니까? –

답변

0

좋아, 해결할 수있었습니다. 그의 도움으로 @Eran에게 감사드립니다. 더 이상 사용되지 않는 GCM API를 사용하고있었습니다. GCMBroadcastReceiver의 기본 구현은 onReceive() 메소드에서

setResult(Activity.RESULT_OK, null /* data */, null /* extra */); 

을 가지고있었습니다. 이것은 결과를 다음 수신자로 전달하지 못하게합니다. onReceive 메서드를 무시하려고했으나 최종적이었고이를 무시했습니다. 그래서, 내가 새로운 GoogleCloudMessaging API를 전환하고 사용자 정의 방송 수신기를 정의하고 onReceive() metod에 내가 이런 짓을 :

@Override 
    public void onReceive(Context context, Intent intent) { 

     String message = intent.getExtras().getString("identifier_tag"); 

     // ignore if message not intended for us 
     if (message == null) { 
      setResultCode(Activity.RESULT_OK); 
      return; 
     } 
     if (!message.equals(IDENTIFIER_TAG)) { 
      setResultCode(Activity.RESULT_OK); 
      return; 
     } 


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

     // message has been handled; do not propagate 
     setResult(Activity.RESULT_OK, null, null); 

} 

것은 무엇 내가 한 것은 수신 된 메시지가 나를 위해 의도 여부를 확인하는 것이 었습니다. 그렇다면 intent 서비스를 호출하고 setResult (Activity.RESULT_OK, null, null); 메시지가 다른 수신자에게 전달되는 것을 막습니다. 메시지가 나를 위해 의도되지 않은 경우, 나는 다음 수신자에게 전달할 것입니다. 또한 매니 페스트 파일에서 메시지를 먼저 수신하도록이 수신기의 우선 순위를 높게 설정합니다.

관련 문제