2011-10-25 3 views
16

나는 활동에 프로그래밍 방식으로 등록 된 브로드 캐스트 리시버를 가지고 있습니다. 패키지가 제거되면 실행되는 PACKAGE_REMOVED 인 텐트에 응답합니다.브로드 캐스트 수신자 및 일시 중지 된 활동

문제는이 메시지가 표시되지 않는다는 것입니다. 이것은 활동을 종료하고 다른 활동으로 이동하여 앱을 제거하기 때문에 의도가 일시 중지되어 원래 활동이 일시 중지 되었기 때문이라고 생각합니다. 일시 중지 된 활동 (수신자가 에 등록되지 않은 경우)도 수신자를 일시 중지시킬 수 있습니까?

답변

36

활동에 프로그래밍 방식으로 브로드 캐스트 수신기를 등록하면 활동이 일시 중지되면 브로드 캐스트가 수신되지 않습니다. BroadcastReceiver docs은 현재로서는 분명하지 않습니다. 그들은 시스템 오버 헤드를 줄이기 위해 onPause 등록을 권장하지 않습니다.

활동이 포 그라운드가 아닌 경우에도 이벤트를 받으려면 receiver 요소를 사용하여 매니페스트에 수신기를 등록하십시오.

+1

현재 등록 된 수신자가 현재 일시 중지 된 활동 내에있는 매니페스트에 등록되어 있으면 해당 수신 활동의 개인 변수에 액세스 할 수 있습니까? – Peterdk

+0

이제는 Receiver 클래스가 인터페이스는 아니지만 상속해야하는 클래스라는 것을 알았습니다. – Peterdk

+0

@chris, 안드로이드 문서에이 문서가 보이지 않습니다. –

2

아마 당신은 배경

5

이 프로젝트에 Receiver 추가 실행 서비스에 수신기를 등록 할 수 있습니다 그리고 당신은 당신의 응용 프로그램을 시작하지 않고이 이벤트를 얻을 것이다. 이 같은 수신기를 사용하면 어떤 레지스터를 호출 할 정도의 등록을 취소 항상 의지하지 않는

<receiver android:name="TestReciver" > 
    <intent-filter > 
     <action android:name="android.intent.action.PACKAGE_REMOVED" /> 
     <data android:scheme="package" /> 
    </intent-filter> 
</receiver> 

:

public class TestReciver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d("TestReciver",intent.getAction()+"\n" 
       +intent.getDataString()+"\n" 
       +"UID: "+intent.getIntExtra(Intent.EXTRA_UID,0)+"\n" 
       +"DATA_REMOVED: "+intent.getBooleanExtra(Intent.EXTRA_DATA_REMOVED, false)+"\n" 
       +"REPLACING: "+intent.getBooleanExtra(Intent.EXTRA_REPLACING, false) 
      ); 
    } 

} 

및 매니페스트에서

는 (당신의 < 응용 프로그램 > 태그 내부)과 같이 추가 데이터를 가져올 준비를하십시오.

사용자가 앱을 SD 카드로 이동할 수있게하면이 기능이 작동하지 않습니다. SD 카드가 마운트 해제 될 때 이벤트가 전송되면 수신자는 액세스 할 수 없으므로 이벤트를 놓치게됩니다.

관련 문제