2014-04-27 3 views
0

내가 IntentService와 함께 활동에 서비스에서 방송을 보내려고했습니다라는 안한다 클래스처럼 :onReceive 방법은 그것을 위해 나는 다음과 같은 코드를 사용했습니다,

public BroadcastReceiver receiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d("TAG", "receiver"); 
     Bundle bundle = intent.getExtras(); 


     if (bundle != null) { 
      int resultCode = bundle.getInt(NotifyService.RESULT); 
      if (resultCode == RESULT_OK) { 

       Toast.makeText(Home.this, "after service work.", Toast.LENGTH_LONG) 
         .show();      
      } 
     } 

     stopService(new Intent(Home.this,NotifyService.class)); 
    } 
}; 

나는 onPause 방법 onResume에서 registerReceiverunregisterReceiver을 사용했습니다

registerReceiver(receiver, new IntentFilter(NotifyService.NOTIFICATION)); 

그러나 onReceive 메서드가 호출 가져 오지는

내가 놓친 것을 This Site

제 7 사용했습니다?

편집

내가 어떤 대체 솔루션 있었나요? 서비스에서 데이터를 업데이트하기 위해 활동을 알리려고했습니다.

+0

서비스가 시작 되었습니까? 'Log.d ("onHandleIntent", "start service"); '이 로그가 인쇄 되었습니까? –

+0

예 @ArtemZinnatullin –

+0

수신자가 등록되지 않은 경우 BroadCast 인 텐트를 보낼 수 있습니까? 귀하의 코드가 정상적으로 보이기 때문에 : –

답변

1

원본 코드가 작동하지 않는 이유가 확실하지 않습니다. 그러나 응용 프로그램 로컬 브로드 캐스트를 원할 경우 일반 응용 프로그램 브로드 캐스트 대신 LocalBroadcastManager을 사용할 수 있습니다. 서비스에

사용이 :

LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 

이러한 활동에 :

LocalBroadcastManager.getInstance(this).registerReceiver(receiver, 
     new IntentFilter(NotifyService.NOTIFICATION)); 

LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver); 

이 아무것도 변경되면 알려주세요. 다시 말하지만 원래 코드가 작동하지 않는 이유는 알 수 없으므로 이것이 더 추측입니다.

+0

고마워, 내 코드에 문제가있어,이 활동의 ​​onPause()가 호출 된 후'unregisterReceiver'가 호출되어'onReceive'가 호출되지 않고 문제가 해결되었지만 코드가 작동했습니다 답장을 보내 주셔서 감사합니다. –

+0

@ user2910110 많은 것을 설명합니다. 물론'onPause'에서 등록을 취소하면, 여러분의 활동이 더 이상 포 그라운드에 없을 때 방송을 수신하지 못할 것입니다! –