안드로이드 브로드캐스트 리시버 예제

Android 8.0보다 오래된 Android 버전에서 실행할 때 수신기와 연결된 의도 필터를 매니페스트 파일의 수신기 요소 내에 배치할 수 있습니다. 다음 단추를 클릭하기 전에 응용 프로그램 이름 필드에 SendBroadcast을 입력하고 회사 도메인 설정으로 ebookfrenzy.com 새 프로젝트를 만듭니다. 프로젝트는 브로드캐스트 수신기의 존재를 공고해야 하며 수신기가 관심 있는 브로드캐스트 의도를 지정하는 의도 필터를 포함해야 합니다. 이전 섹션에서 BroadcastReceiver 클래스가 만들어졌을 때 Android Studio는 매니페스트 파일에 요소를 자동으로 추가했습니다. 따라서 SendBroadcastActivity.java 파일 내에 코드를 추가하여 의도 필터를 만들고 수신기를 등록하는 것만 하면 여러 시스템 이벤트가 Intent 클래스의 최종 정적 필드로 정의됩니다. 다른 Android 시스템 클래스는 또한 이벤트를 정의합니다(예: TelephonyManager)는 전화 상태 변경에 대한 이벤트를 정의합니다. Android 8.0 이상에서 수신기는 적절하게 구성된 IntentFilter 개체와 함께 활동 클래스의 registerReceiver() 메서드를 사용하여 코드에 등록되어야 합니다. 컨텍스트.registerReceiver() 메서드를 통해 동적으로 사용됩니다. 이제 안드로이드 장치가 부팅 될 때마다, 그것은 BroadcastReceiver MyReceiver에 의해 가로 채고 onReceiver() 내부의 논리를 구현실행됩니다. 이 수신기가 현재 브로드캐스트를 중단해야 한다는 플래그를 설정합니다. 컨텍스트#sendOrderedBroadcast(의도, 문자열)를 통해 전송된 브로드캐스트에서만 작동합니다. 이렇게 하면 다른 브로드캐스트 수신기가 브로드캐스트를 수신하지 못하게 됩니다. 컨텍스트#sendOrderedBroadcast(의도, 문자열)의 호출자가 전달한 BroadcastReceiver의 수신(컨텍스트, 의도)을 계속 호출합니다.

앱 외부의 구성 요소에 브로드캐스트를 보낼 필요가 없는 경우 지원 라이브러리에서 사용할 수 있는 LocalBroadcastManager를 사용하여 로컬 브로드캐스트를 보내고 받을 수 있습니다. LocalBroadcastManager는 훨씬 더 효율적이며(프로세스 간 통신이 필요하지 않습니다) 브로드캐스트를 수신하거나 보낼 수 있는 다른 앱과 관련된 보안 문제에 대해 생각하지 않도록 할 수 있습니다. 로컬 브로드캐스트는 시스템 전체 브로드캐스트의 오버헤드 없이 앱에서 범용 펍/하위 이벤트 버스로 사용할 수 있습니다. 수신기(브로드캐스트 의도)를 트리거하려는 의도는 시스템에서 전송및 처리된 후에더 이상 사용할 수 없습니다. sendStickyBroadcast(의도) 메서드를 사용하는 경우 해당 의도는 고정되어 있으므로 브로드캐스트가 완료된 후에도 전송하려는 의도가 유지됩니다. API 수준 11 이전에는 onReceive() 메서드가 완료되면 Android 시스템이 해당 구성 요소를 재활용할 수 있었기 때문에 onReceive() 메서드에서 비동기 작업을 수행할 수 없습니다. 실행 중인 작업이 오래 실행될 수 있는 경우 대신 서비스를 트리거해야 합니다.