2012-12-19 1 views
7

푸시 알림에 GCMIntentService을 사용하는 응용 프로그램을 개발 중입니다. 그래서 내 TabActivity의 탭에있는 하나의 ListView의 데이터를 새로 고침하고 싶습니다. 그렇다면 GCMIntentService에서 수신 할 수 있습니까? GCMIntentMessage? 예를 들어GCMIntentService에서 onResume() 또는 onCreate()를 호출하십시오.

SecondTabActivity.callOnResume(); //or something like this 

또는

내가 startActivity(intent)을 사용하지 않고이 작업을 수행 할 필요가
SecondTabActivity.callOnCreate(); // or something like this 

; 원인 SecondTabActivity가 내 TabHost에서 벗어나 새 Activity처럼 시작됩니다. ListView을 새로 고치는 기능은 onCreate(에 있으며 SecondTabActivity에서는 onResume()이므로 그걸 호출하고 싶습니다. 이 옆에 다른 방법이 있으면 참조하십시오. 감사합니다

답변

8

좋은 방법은 방송의 의도를 사용하는 것입니다. 당신의 TabActivity의에서 onCreate에서

  1. 는 같은라는 목적을위한 방송 수신기 등록하기 위해 Context.registerReceiver 방법을 사용하여 "MyGCMMessageReceived을."

  2. 해당 브로드 캐스트 수신기에서 목록을 새로 고치는 메서드를 호출하십시오.

    this.registerReceiver(new BroadcastReceiver() { 
        @Override 
        public void onReceive(Context context, Intent intent) { 
         // INSERT CODE TO REFRESH LIST VIEW 
        } 
    }, new IntentFilter("MyGCMMessageReceived")); 
    
  3. 은 GCMIntentService의 onMessage 메소드는 "MyGCMMessageReceived"라는 의도를 방송합니다.

    Intent intent = new Intent("MyGCMMessageReceived"); 
        this.sendBroadcast(intent); 
    
+0

이것은 좋은 대답처럼 보인다하지만 난 완전히 당신이 말하려고하는 것을 이해할 수 없다. 저격 한 코드를 좀 주시겠습니까? – Naskov

+1

물론 추가 된 코드 스 니펫. – tom

+0

@ Naskov 그게 효과가 있었나요? – tom

1

당신은 활동 커뮤니케이션에 서비스에 LocalBroadcastManager을 사용해야합니다.

IntentService에서 로컬 방송을 통해 새 정보를 보내면 TabActivity에서 수신기를 등록해야합니다. onReceive 메서드에서보기를 새로 고쳐야합니다. 여기

당신은 쉽게 예를 : LocalBroadcastManager example

관련 문제