Broadcast Receivers (Android Development Fundamentals, Unit 3: Lesson 7.3)

[음악 재생] 발표자 : Android 애플리케이션은 아무 것도하지 않습니다 특정 유형의 메시지가 나타날 때까지 안드로이드 운영 체제에 의해 방송, 또는 다른 응용 프로그램

앱이 어떤 방식 으로든 반응하기를 원한다고 가정 해 보겠습니다 시스템 이벤트가 발생할 때 예를 들어, 음악 앱을 만들 수 있습니다 그리고 앱을 실행하고 싶습니다 헤드폰이 연결되어있을 때 음악 재생을 시작하려면, 헤드폰을 제거하면 음악 재생이 중단됩니다 이러한 이벤트가 발생할 때 앱에서 어떻게 알 수 있습니까? 음, 여기에 우리는 브로드 캐스트 리시버가 있습니다

몇 분 후에 이해할 수 있습니다 이 전체 메커니즘은 구현과 관련됩니다 방송 의도와 방송 수신기의 그래서이 세션에서 우리는 방송 의도가 시스템 전반의 메시지를 방송하는 방법 다른 구성 요소와 방송 수신자의 청취 방법 해당 특정 방송 의도에 대해 또한 사용자 정의 브로드 캐스트를 작성하는 방법도 배웁니다 보안 문제에 대해서도 논의 할 예정입니다 로컬 브로드 캐스트를 사용하여이를 극복하는 방법 앱 내에서 브로드 캐스트를 전송할 수있게 해줍니다

대신 시스템 전체 응용 프로그램 브로드 캐스트 인 텐트는 브로드 캐스트되는 인 텐트 개체입니다 의사 소통을 돕는 의도 두 구성 요소 사이 따라서 시작을위한 메커니즘을 제공하는 것 외에도 응용 프로그램 활동, 의도 또한 방법으로 사용됩니다 시스템 전반의 메시지를 다른 구성 요소에 브로드 캐스트하는 방법 시스템에

이 메커니즘에서 여기에 방송 의도 사용 된 의도와 완전히 별개입니다 활동을 시작하려면 사용자가 현재 상호 작용하고있는 것을 보여 주며, 시작 활동에 보냅니다 달성하려는 하나의 활동에만 영향을줍니다 특정 작업 반면, 방송 의도는 백그라운드 작업입니다

사용자가 일반적으로 알지 못하는 sendBroadcast를 통해 전송됩니다 기본적으로 여러 응용 프로그램에 영향을 줄 수 있습니다 인 텐트를 수신하기 위해 등록 된 방송 수신기는 구성 요소입니다 어떤 일이 일어나고 있는지를 듣고 등록 할 수 있습니다 시스템 또는 응용 프로그램 이벤트의 경우, 그들이 응답으로 무언가를한다는 것을 의미합니다

방송되는 그 메시지에 응용 프로그램은 특정 들어오는 이벤트를 수신합니다 sendBroadcast에 의해 보내지고, 방송을 등록함으로써 리시버 방송 의도가 발생할 수 있음 특정 이벤트가 발생했을 때 시스템에서 체계 예를 들어, 화면을 알리는 방송 꺼 졌거나 배터리가 부족한 경우, 또는 그림이 캡처되었습니다

또는 다른 응용 프로그램에서 유래 할 수 있습니다 음악을 시작할 때 앱을 설정할 수도 있습니다 당신은 헤드폰에 연결합니다 따라서 메시지를 받으면 백그라운드에서 실행됩니다 그 헤드폰이 연결되어 있고 발사로 응답 귀하의 음악 응용 프로그램

방송 사업자 수신기는 사용자 인터페이스를 표시하지 않지만, 활동이 종료 된 경우에도 백그라운드에서 실행됩니다 예를 들어 음악 앱에서 알림을 게시하는 경우 다가오는 헤드폰 이벤트에 대해 사용자에게 알리기 위해 연결되면 상태 표시 줄 알림을 만들 수 있습니다 브로드 캐스트 이벤트가 발생할 때 사용자에게 경고합니다 따라서 방송 수신기가 구현됩니다 Android 브로드 캐스트 수신기 클래스 확장 onReceive 메소드를 오버라이드 (override)하는 것

특정 브로드 캐스트 인 텐트를 청취해야합니다 브로드 캐스트 인 텐트가 수신되어 전달 될 때 onReceive에게,이 시점에서, 메소드 필요한 모든 작업을 수행하는 데 5 초가 걸립니다 수신기가 파괴되기 전에 브로드 캐스트 리시버가 필요하지 않습니다 항상 뛰는 것

일치하는 인 텐트가 감지 된 경우, Android 런타임 시스템이 자동으로 실행됩니다 전화하기 전에 방송 수신기를 시작하십시오 onReceive 메소드 시스템이 부팅을 완료하는 것처럼, 또는 무선 네트워크 연결이 끊어집니다 Wi-Fi 상태가 변경 될 때 따라서 표시된대로 이러한 작업을 지정할 수 있습니다

앱의 인 텐트 필터 내부 화면 앱이 맞춤 의도를 브로드 캐스팅 할 수도 있습니다 이는 개발자가 정의한다는 의미입니다 사용자 정의 인 텐트에는 사용자가 화면에서 제공 한 데이터가 포함될 수 있습니다 해당 응용 프로그램이 사용자 정의 의도를 브로드 캐스팅하도록하려면, 우리는 하나를 보내야합니다 관심있는 모든 방송에 인 텐트를 브로드 캐스트하려면 수신기에는 두 가지 주요 방송 클래스가 있습니다

일반 방송을 사용하십시오 sendBroadcast 메서드를 사용하여 보내집니다 또는 주문 방송과 함께 전송됩니다 sendOrderBroadcast 메소드와 함께 따라서 사용자 정의 의도를 전송 한 후, 수신기를 등록해야합니다

사용자 정의 의도 및 의도에 대한 동작을 정의합니다 androidmanifestxml 안의 수신기 용 필터 SendBroadcast 메서드가 완전합니다 비동기, 즉 브로드 캐스트 이벤트 또는 인 텐트 모든 수신기에 의해 수신된다

비동기식으로 수신기는 정의되지 않은 순서로되어 있으며, 종종 동시에 효율적이지만 수신자는 다른 사람의 결과를 사용할 수 없습니다 수신기 sendOrderBroadcast는 한 번에 하나의 수신자에게 전달됩니다 각각의 수신기가 인 텐트를 실행함에 따라, 결과를 다음 수신자에게 전파 할 수 있으며, 또는 방송을 완전히 중단시킬 수 있습니다

그래서 그것은 다른 수신기들에게 전달되지 않을 것이다 다른 수신기는 제어 할 수 있습니다 일치의 androidpriority 속성과 함께 의도 필터 우선 순위가 동일한 수신자는 임의의 순서로 실행됩니다

수신자가 결과를 전파 할 수있게하려면 또는 방송을 중단하려면 방송을 주문해야합니다 sendOrderBroadcast를 사용합니다 이 방송 전체 메커니즘이 어떻게 작동하는지 이해합시다 수신기가 구현 될 수있다 브로드 캐스트 리시버를 생성하기 위해서는 다음 단계가 필요합니다 새로운 클래스를 만들어야합니다

브로드 캐스트 리시버의 서브 클래스입니다 이베이스의 onReceive 메소드를 구현 한 클래스 수업 이벤트가 발생할 때마다 Android onReceive 메서드를 호출합니다 응용 프로그램이 특정 브로드 캐스트 인 텐트를 청취합니다 방송 수신기를 등록함으로써 두 가지 방법으로 코드를 등록 할 수 있습니다

(예 : 활동 내 또는 매니페스트 파일 내) 방송 수신기들을 정적으로 등록하기 위해, AndroidManifestxml에 등록하십시오 방송을 등록함으로써 동일한 효과를 얻을 수있다 수신기를 프로그램 적으로 또는 동적으로, 액티비티 클래스의 register receive 메소드 사용 적절한 구성 의도가있을 때 함께 그 대상과

화면에서 보듯이 Android 브로드 캐스트 수신기를 확장하는 클래스입니다 이런, 이런 여기서 onReceive 메소드를 볼 수 있습니다 보시다시피, 이것은 브로드 캐스트 수신기가 Android 브로드 캐스트 수신기를 확장하여 구현됩니다 onReceive 메소드를 오버라이드 (override)합니다

그래서 CustomReceiver라는 새로운 클래스를 만들었습니다 BroadcastReceiver를 확장 중입니다 그래서 방송 수신기를 만든 후에, 우리가 아는 다음 단계는 그것을 등록하는 것입니다 AndroidManifest로 한 번 시도해 보겠습니다 여기서 수신기 항목을 추가해야합니다

하나 이상의 인 텐트 필터를 포함하고, 각각은 브로드 캐스트 인 텐트의 액션 문자열을 포함한다 수신자가 요구되는 예제에서 볼 수 있듯이 특정 의도를 나열합니다 그리고 다른 구성 요소와 마찬가지로, 우리는이 receiver 요소를 application 요소 안에 정의한다 대안 적으로, 정적 등록을 통해, 수신자를 등록 및 등록 취소 할 수도 있습니다 컨텍스트 클래스를 통해 한 번에 수신기 메서드를 등록합니다 onCreate 또는 onResume 활동 메소드에서

그리고 onDestroy에서 수신기 메소드를 등록 취소합니다 또는 onPause 액티비티 메소드에서 슬라이드의 맨 아래에 코드 스 니펫이 표시됩니다 그리고 당신이 볼 수 있듯이, 활동의 등록 수신기 방법 적절하게 의도를 구성했을 때 함께 수업을 진행하다 개체에 대한

동적으로 registerReceiver 등록을 잊지 마라 수신자 등록 방법을 사용하여 이것을 잊어 버리면 안드로이드 시스템 유출 된 브로드 캐스트 리시버 오류를보고합니다 예를 들어, 수신을 등록한 경우 inResume 활동의 메소드, onPause 메서드 내에서 등록을 취소해야합니다 방송 수신기는 Android의 매우 중요한 구성 요소입니다

몇 가지 중요한 시스템 목록이 있습니다 액션 런타임이 변경된 것과 같은 이벤트는, 또는 시스템 부팅이 완료되었을 때, 그리고 훨씬 더 이 방송 활동을 확인해보십시오 이 링크에서 onReceive 메소드 구현에 대해 이야기했습니다

방송 수신기 클래스의 기본 클래스의 방송 수신기가 갖는 이벤트가 등록 된 사건, onReceive 메서드 수신자의 전화 번호는 Android 시스템에 의해 호출됩니다 여기서는 onReceive 메서드를 보여줍니다 두 개의 인수를 취합니다 문맥

액세스에 사용할 수있는 컨텍스트 개체 추가 정보 또는 서비스 또는 활동 시작 두 번째로, 의도 객체, 액션 당신은 수신기를 등록하는 데 사용할 수 있습니다 사용자 지정 브로드 캐스트, 동작 문자열 고유 한 브로드 캐스트 이벤트를 식별하는 일반적으로 응용 프로그램의 Java 패키지를 사용합니다 이름과 텍스트 예를 들어, 다음 브로드 캐스트 고유 한 동작 문자열을 포함하는 의도, 패키지 이름을 접두사로 포함합니다 이 작업을 설명해야합니다

활동 및 방송 수신기에서도 마찬가지입니다 당신은 우리가 어떻게 사용자 정의 의도를 보냈는지 알고 있습니다 우리가 가지고있는 sendBroadcast 메소드를 사용하여 이전 슬라이드에서 배웠습니다 그래서 여기에 다음을 사용하여 액션을 첨부하는 방법이 있습니다 사용자 정의 인 텐트

등록을 취소하는 코드는 다음과 같습니다 귀하의 등록 된 방송 수신기, unregisterReceiver 메소드를 호출하여 Android는 보안 기능과 작업을 통합합니다 개발자 및 장치 구현 자와 Android 플랫폼 및 생태계를 안전하게 유지합니다 우리가 방송 수신기로 작업 할 때, 보안 측면에서 몇 가지 사항을 고려해야합니다

그래서 하나씩 이해합시다 Android 애플리케이션에서 브로드 캐스트 사용 문맥과 함께 사용되는 수신기처럼 때로는 문제를 일으킨다 다른 응용 프로그램에서도 수신 할 수 있습니다 따라서 앱 간 경계를 고려해야합니다 의도 네임 스페이스는 전역입니다

의도 동작 이름 및 기타 문자열이 자신이 소유 한 네임 스페이스에 쓰여 있거나, 당신은 다른 응용 프로그램과 충돌합니다 등록 수신자 메소드를 사용할 때, 다른 응용 프로그램이 브로드 캐스트를 보낼 수 있습니다 등록 수신기에 브로드 캐스트를 보낼 수있는 사람을 제어 할 수 있습니다 사용 권한을 사용하여

그리고 방송을 보내거나 메시지를 보낼 때, 일반적으로 다른 모든 응용 프로그램이이 브로드 캐스트를 수신 할 수 있습니다 그러나 이러한 브로드 캐스트를 수신 할 수있는 사용자를 제어 할 수도 있습니다 권한을 통해 즉, 액세스 권한을 적용 할 수 있습니다 발신자 또는 수신자

전송할 때 권한을 시행하려면, 당신은 허가 인수를 제공한다 방송 전용 수신기를 보내려면 요청하여이 허가를 받았다 manifestxml 파일에 사용자 권한 태그 포함 방송을 수신 할 수 있습니다 이 수신기는 브로드 캐스트 인 텐트를 수신합니다

필요한 권한이 있어야합니다 그리고 수신 할 때 허가를 얻기 위해, 등록 할 때 허가를 당신의 수신기, registerReceiver 또는 AndroidManifestxml의 수신자 태그에 추가하십시오 그래서 유일한 방송사는 사용자 권한을 사용하여이 사용 권한이 부여되었습니다 태그가 AndroidManifest

xml에 있습니다 수신자에게 의도를 보낼 수 있습니다 보안 문제가 전혀 존재하지 않습니다 로컬 브로드 캐스트 매니저 클래스를 사용할 때 보안 통신 메커니즘을 구현하는 데 사용 되었기 때문에 앱 구성 요소 내에서 로컬 브로드 캐스트 관리자를 사용하여 브로드 캐스트 및 등록 수신기는 거기에서 안전한 방법을 제공합니다 앱 간 통신이 없습니다

슬라이드 하단의이 예 로컬 브로드 캐스트 관리자를 사용하여 보내고받는 방법을 보여줍니다 방송 인 텐트 오브젝트를 생성하는 것만 큼 쉽습니다 그 의도 객체를 사용하여 sendBroadcast를 호출하고 같은 registerReceiver에 대해서도 마찬가지입니다 onResume에서 의도 필터는입니다

지정된 동작을 위해 수신기를 등록하기 위해 생성됩니다 의도 필터 생성자는 작업을 매개 변수로 사용합니다 따라서이 작업으로 브로드 캐스트를 수신 할 수 있습니다 이 코드는 리시버를 등록하는 방법을 보여줍니다 로컬 브로드 캐스트를 사용하여 의도 필터 사용 매니저와 registerReceiver

그 후에, 수신기는 능력을 가지고 있습니다 지정된 액션으로 브로드 캐스트 받기 ACTION_CUSTOM_BROADCAST 자세한 내용은 참조 자료를 확인하십시오 방송 수신기에 대한 링크 다음 실용적인 방법은 구현시 실습에 도움이됩니다

방송 수신기의 계속 배우고 지켜봐 주셔서 감사합니다