2012-02-17 3 views
2

BroadcastReceiver가 백그라운드에서 방송을 수신 한 활동에있을 수 있습니까? 그렇지 않다면 어떻게해야합니까? 백그라운드 활동의 BroadcastReceiver가 브로드 캐스트를 수신 할 수 있습니까?

는 편집 :

나에게 정말 필요한 것을 명확히하자. 블루투스에서 데이터를 수신하는 서비스는 입니다. 파란 이빨 장치에서 데이터를 성공적으로 수신하면 서비스가을 방송합니다.

의 세 가지 경우가 있습니다.

  1. 전경

팝업 대화와 나는 그것을 단순히 활동에 레지스터 수신기 수행 할 수 있다고 생각 사용자 뭔가를 물어

  1. 배경

I 단지 이 부분을 수행하는 방법을 모른다.. 수신자를 애플리케이션에 등록하면 알림이 표시됩니다. 아래 답변을 살펴본 후 신청서에 등록 할 수 있다고 생각합니다.

  1. 수면 일어나 장치.

감사합니다.

답변

5

아마도 원하지 않을 것입니다. 활동은 그런 식으로 사용하도록 고안되지 않았습니다.

서비스를 처리하려면 서비스를 사용해야합니다. UI가 필요할 경우 Activity를 시작하십시오.

두 가지 대안이 있습니다.

  1. 서비스를 실행하고 대신 수신기를 등록하십시오.
  2. 가능한 경우 매니페스트에 브로드 캐스트 리시버를 등록하고 거기에서 처리 할 수 ​​있습니다. 리시버는 메인 스레드에서 실행되므로 실행중인 서비스에 신호를 보내거나 서비스 또는 활동을 시작해야합니다. 아마도 단일 작업을 수행하는 서비스 일 것입니다.

단일 작업을 수행하는 서비스는 IntentService을 사용하여 쉽게 구현할 수 있습니다. 이것은 서비스에서 랩핑 된 비동기 태스크와 비슷합니다.

+0

추가 정보 2 점을 덧붙이 자면, 스레딩을 처리하거나 IntentService를 무료로 사용하지 않는 한 서비스가 주 스레드에서 실행될 것이라고 덧붙이고 싶습니다. –

3

BroadcastReceiver가 백그라운드에서 브로드 캐스트 수신 활동에 참여할 가능성이 있습니까? 그렇지 않다면 어떻게해야합니까?

registerReceiver으로 전화하고 unregisterReceiver으로 전화하기 전에 언제든지 알림을받을 수 있습니다. "배경"에있을 때 브로드 캐스트를 수신하는 경우 아마도 등록을 묶지 않고 해당 활동의 라이프 사이클에서 적절한 메소드에 대한 호출을 등록 취소합니다.

3

브로드 캐스트 리시버를 액티비티의 컨텍스트에 등록하면 해당 액티비티가 살아있는 한 브로드 캐스트를 수신하게됩니다.

그러나 수신기를 응용 프로그램 컨텍스트에 등록 할 수 있으며 활동이 살아 있지 않아도 계속 브로드 캐스트를 수신합니다.

+1

하지만이 문제는 비공개 활동 또는 일부 별도의 처리기. 액티비티가 반드시 살아 있어야한다는 사실은 'if'가 큰 것입니다. –

관련 문제