내 응용 프로그램에 GCM에 대해 2 개의 수신기와 2 개의 GCMIntentService 클래스가 있습니다. 하나는 내 앱 안에 있고 다른 하나는 내 애플리케이션에 추가 한 라이브러리에 포함되어 있습니다. 메시지가 GCM을 통해 수신되면, 나는 어떤 메시지가 의도 된 인 텐트 서비스를 식별하고 올바른 수신자가 처리하도록하는 방법을 원할 것이다. 어떤 사람은 here에게 다음 수신자에게 결과를 전달할 것을 제안했지만, 그 사람이 내 의도가 아니라면 그 일을 처리 할 수 없었습니다. 어떤 사람이 저를 도울 수 있다면 정말 감사 할 것입니다.android에있는 다음 BroadcastReceiver에 결과를 전파하십시오.
0
A
답변
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); 메시지가 다른 수신자에게 전달되는 것을 막습니다. 메시지가 나를 위해 의도되지 않은 경우, 나는 다음 수신자에게 전달할 것입니다. 또한 매니 페스트 파일에서 메시지를 먼저 수신하도록이 수신기의 우선 순위를 높게 설정합니다.
관련 문제
- 1. 변경 내용을 열에 전파하십시오.
- 2. BroadcastReceiver에 BOOT_COMPLETED가 알려지지 않음
- 3. 쉘 스크립트에서 값을 전파하십시오.
- 4. 위젯에서 keyEvent를 QKeySequenceEdit으로 전파하십시오.
- 5. BroadcastReceiver에 매개 변수 전달
- 6. BroadcastReceiver에 엑스트라를 전달하는 방법
- 7. 하이퍼 링크를 android에있는 URL을
- 8. android에있는 비디오에 오디오 추가하기
- 9. Google지도의 mapfragment가 android에있는 공백입니다.
- 10. android에있는 파일의 생성 일
- 11. android에있는 문자 계산하기
- 12. Phonegap jQueryMobile android에있는 테마
- 13. Assets 폴더의 Android에있는 ResourceBundle
- 14. FluentValidation에서 하위 오류를 부모에게 전파하십시오.
- 15. 데이터베이스에있는 데이터를 android에있는 서버에서 읽습니다.
- 16. IntentService의 registerReceiver가 BroadcastReceiver에 맞지 않습니다.
- 17. android에있는 파일 목록을 표시 하시겠습니까?
- 18. android에있는 파일에 해시 테이블을 직렬화하기
- 19. android에있는 홀더에 대한 기본 정보
- 20. android에있는 클래스에 대한 참조가있는 컨텍스트
- 21. 힌트를 android에있는 버튼으로 설정하는 방법
- 22. 저장 방법 screenshot을 android에있는 데이터베이스에 저장
- 23. 앱이 백그라운드에서 Android에있는 경우 알림을 보내려면 어떻게해야하나요?
- 24. WPF : 유효성 검사 오류를 시각적 트리로 전파하십시오.
- 25. 캔버스에서 div 이벤트로 클릭 이벤트를 전파하십시오.
- 26. QWidget 클릭 이벤트를 무시하고 OS에 전파하십시오.
- 27. 여러 joomla 사이트에 자동 업데이트를 전파하십시오.
- 28. Android의 인 텐트를 통해 BroadcastReceiver에 인수 전달
- 29. 패턴은 안드로이드에서 BroadcastReceiver에 의한 잠금 해제 시도
- 30. 별도의 클래스에있는 Access ArrayList는 BroadcastReceiver에 의해 확장됩니다.
나는 그 제안을 썼다. 정확히 당신에게 효과가없는 것은 무엇입니까? 우선 순위를 사용하여 어떤 수신자가 먼저 호출되는지 결정할 수 있으며 송신자 ID를 사용하여 메시지가 특정 수신자를위한 것인지 여부를 알 수 있습니다. – Eran
응답 해 주셔서 감사합니다. 예, 어떤 리시버가 의도되었는지는 알 수 있지만 다른 리시버로 결과를 전달하는 방법을 알지 못합니다. –
수신자에 대한 메시지를 식별하기 위해 메시지와 함께 식별자 문자열을 보내고 GCMIntentService onMessage() 메소드 내에 수신 된 메시지에 해당 문자열이 포함되어 있는지 확인합니다. 그게 올바른 접근인지 확실하지 않습니다. 이런 뜻 이었니? 그렇지 않다면, 이것을 처리 할 수있는 정확한 위치는 무엇입니까. 사용자 정의 GCMBroadcastReceiver를 정의해야합니까? –