Broadcast Receiver – Part 1, An Introduction

안녕 얘들 아 여기 Codetutor 그리고 내 이름은 Anil Deshpande입니다 이 동영상으로 방송 수신기 인 Android 구성 요소의 새로운 개념을 시작하십시오

전에 방송 수신기 란 무엇이며 어떻게 사용 되는가? 왜 방송 수신기가 필요한지 이해해주십시오 일반적으로 안드로이드 운영 체제, 당신은 다른 유형의 많은 발생합니다 발생중인 이벤트 이러한 이벤트는 배터리 부족, Wi-Fi 가용성, 수신 전화, 수신 SMS, 연결된 Bluetooth 장치, 충전기 연결됨 또는 그 이상의 연결이 끊어졌습니다 아마 당신은 시나리오를 만날 것입니다 여기서 어떤 이벤트에 응답하고 싶습니까? 체계

예를 들어 배터리 부족 이벤트가 발생하면 백엔드 데이터 폴링 메커니즘을 사용하여 (에서) 응용 프로그램을 불필요하게 배터리를 더 많이 소모시킵니다 당신은 기본적으로 이러한 사건을 "경청하십시오" 그리고 그 때문에 당신은 "청취자"가 필요할 것입니다 이 "청취자"는 이러한 특정 이벤트를 청취하기 위해 등록 된 경우에만 청취하십시오 만약 내가 청취자가 기술적 인 용어로 표현하려고 시도하지만 방송은 아니다

수신기와이 특정 방송 수신기를 등록하는 방법은 매니페스트 파일 또는 코드를 통해 그리고 우리가 이야기하고있는 사건들 여기는 의도에 불과합니다 이런 종류의 사건이 발생할 때마다 기본적으로 인 텐트가 트리거되고, 우리는 "인 텐트가 방송 됨"이라는 용어를 사용하고, 브로드 캐스트 리시버가 매니페스트 파일 또는 코드를 통해 수신되면 수신 대기 이러한 이벤트 방송 및 해당 방송 수신기가 올바르게 선언 된 경우 매니페스트 파일 또는 코드에서이 브로드 캐스트 인 텐트에 응답합니다 나는 이것을 구현할 코드를 통해 이것을 증명할 것이다 브로드 캐스트 리시버를 매니페스트 파일에 선언 한 다음 이 특정 방송 수신기는 들어오는 SMS 그것이 우리가 될 것에 대한 전반적인 생각입니다

이 특별한 데모에서 시범을 보입니다 그래서 내가 가지고있는 응용 프로그램을 열어 보겠습니다 이미 생성되었습니다 당신은 여기에 활동이 있음을 볼 수 있습니다 그리고이 활동 레이아웃 꽤 간단합니다

여기에 보여줄 중요한 것은 없습니다 그것은 텍스트 뷰를 가지고있다 문자 메시지 "Brodcast Receiver app started" 이제 내가해야 할 일은 내가 할 일이다 클래스를 만들고 MyBroadcastReceiver라고 부르면이 클래스는 BroadcastReceiver 클래스를 확장합니다

일단 방송 수신기를 확장하면 그 중 하나를 오버라이드 할 수 밖에 없다 on 수신 따라서이 메서드는 브로드 캐스트 수신기가 트리거 될 때마다 실행됩니다 그리고 간단히하기 위해 여기에 메시지를 토스트합니다 그게 전부입니다

우리는 방송 수신기의 구현을 완료했습니다 그만큼 다음 부분은 이것을 등록해야합니다 그래서 매니페스트 파일에서 다른 태그, <receiver> 그리고 MyBroadcastReceiver를 확인해야합니다 SMS를받을 수있는 적절한 권한이 있으므로 여기에 RECEIVE_SMS 및 READ_ SMS라는 두 가지 사용 권한을 사용했는지 확인하십시오 READ_ SMS 나는 SMS의 내용을 읽지 않을 것이기 때문에 필요하지 않습니다

난 그냥 받은 SMS에 응답 할 수 있기를 원합니다 그렇다면 나는 또한 의도 필터 그것은 내가 암시 적 의도 개념을 트리거하는 데 사용해야합니다 이 특정 구성 요소 따라서 의도 필터와 액션은 액션 값의 이름을 지정합니다

내가 줄 필요가있는 것은 SMS_RECEIVED입니다 그리고 그게 다야 내 브로드 캐스트를 등록했습니다 수신자가 수신 한 모든 SMS에 응답 할 수있는 적절한 수신기 게다가 이제 코드를 실행 해 보겠습니다

SMS를 보낼 수 있도록 여기 컨트롤러, 확장 컨트롤러 및 전화 탭을 통해 SMS를 보낼 수 있습니다 그래서 내 브로드 캐스트 리시버 애플리케이션이 시작되어 SMS를 보냈습니다 토스트 메시지 "브로드 캐스트 리시버 트리거 됨"이 표시되는 것을 볼 수 있습니다 "브로드 캐스트 수신기가 트리거 됨" 방송 수신기를 사용하는 또 다른 이점은 방송 수신자가 선언 된 앱을 계속 실행하지 않아도됩니다

그게 무슨 뜻인지 – 나는이 특정 응용 프로그램을 닫고 계속 보낼 수 있습니다 그것과 나의 방송 수신은 여전히 ​​트리거되지만 문제는 관련되어 있습니다 이 특별한 메커니즘 읽고 싶은지에 관계없이 SMS 또는 들어오는 SMS에 응답 내 방송 수신기는 항상 트리거 됨 이것에 대한 해결책은 매니 페스트 파일 I에서 선언하는 것이 아닙니다

소스 코드를 통해 등록해야합니다 이것은 내가 가고있는 무엇인가이다 다음 비디오에서 논의하기 위해 계속 조정했다 채널을 구독하는 것을 잊지 마세요 공유하고 의견을 말하십시오

의견이있는 비디오 돌보다

Broadcast Receiver – Part 2, Dynamic Registration of Broadcast Receiver

안녕 얘들 아 여기 Codetutor 그리고 내 이름은 Anil Deshpande입니다 이전 비디오에서 우리는 브로드 캐스트 수신자를 생성하고이를 매니페스트 파일에 선언하여 청취 할 수있는 방법을 보았습니다

들어오는 SMS 매니페스트 파일에서 브로드 캐스트 리시버 선언하기 대부분의 상황에서 작동하지만 특정 시나리오에서는 이것은 적절한 해결책이 아닙니다 예를 들어 앱이 있고 앱은 백업에서 전송되는 한 번만 암호를 읽어야합니다 한 번 암호, 그것을받을 때 내 방송 수신기가 그것을 읽고 들어오는 일회용 암호를 인식 할 수 있습니다 하지만 내 앱이 아닌 경우 포 그라운드에서 내 앱이받을 것임에도 불구하고 이 특정 OTP는 매니페스트 파일에 선언되어 있기 때문에 잘못된

매니페스트 파일에 선언하는 대신 방송은 코드에 관한 것입니다 그래서 이것을 데모에서 봅시다 내가 무엇을 먼저 할 것인가? 매니페스트 파일에서 내가 여기 선언 한 내용이 무엇이든간에 그것 그래서 나는 이것이 단지 내가 이것을 할 필요는 없다는 것을 논평 할 것이다 이 특정 방송 수신기를 코드를 통해 등록합니다

그것을 위해 나를 보내 줘 다시 활동으로 나는 이것이 필요한 방송 수신기의 예를 가지고있다 초기화 된 브로드 캐스트 리시버는 새로운 MyBroadcastReceiver와 같습니다 브로드 캐스트 수신기가 nitialized이며 지금은 그것을 등록해야합니다

지금 나는 어디에서해야합니까? 이거 등록 해? onStart ()는 활동을 시작하고 onstop ()이 시작할 때 트리거됩니다 응용 프로그램이 백그라운드로 돌아갈 때 트리거됩니다 만약 등록은 onStart () 메소드에서 일어날 필요가있다 활동 라이프 사이클 및 등록 취소가 onPause / onStop 활동의 라이프 사이클 방법 그래서 그렇게 하죠

registerReceiver broadcastreceiver 두 번째 매개 변수는 의도 필터입니다 그럼 내가 만들어 보자 인 텐트 필터 인 텐트 필터에 의해 생성 된 것은 새로운 의도와 같습니다 필터와 내가 필요한 두 가지 값은 액션입니다

태그를 사용하여 매니페스트 파일에 등록했습니다 그리고 그 특정한 의도를 여기에서 지나치게하겠습니다 그리고 나는 이것을 등록에서 제외 할 것입니다 onStop 메소드에 있습니다 따라서 초기화 된 브로드 캐스트 수신기의 등록을 취소하고 이제이 특정 코드를 실행하도록하겠습니다

따라서 내 앱은 시작과 함께 시작되었습니다 방송에 등록되어 있습니다 지금 SMS를 보내면 수신 SMS를 인식합니다 토스트 메시지가 거기에 있다는 것을 알 수 있습니다 내가 이것을 닫으면 내가 메시지를 보내면 그 특별한 것을 보지 못할 것이다

토스트 메시지 그래서 이것은 동적으로 등록하고 이해할 수있는 방법입니다 귀하의 요구 사항에 더 잘 맞는 방송 수신기 그것은 우리를 끝으로 인도한다 이 특정 비디오의 잊지 마세요 의견 공유 비디오 및 채널을 구독하십시오

잘가, 안녕

Broadcast Receiver – Part 3, Listening to custom intent broadcasts

안녕 얘들 아 CodeTutor andmy 이름은 Anil Deshpande입니다 이전 비디오에서는 어떻게하면 여러 인 텐트를들을 수있는 broadcastreceiver

이러한 의도 브로드 캐스트는 기본적으로 시스템에서 생성 된 의도 된 브로드 캐스트입니다 내 의도의 방송을 만들고 방송 수신기를 디자인하고 싶다면 어떻게해야합니까? 내 맞춤 생성 의도 방송을 청취합니다 이 비디오에서 이 특정 시나리오를 구현하는 방법부터 시작하겠습니다 내 브로드 캐스트 리시버가 생성 된 것을 볼 수 있습니다 브로드 캐스트 수신기가 MyBroadcastReceiver이고 내 자신을 만들었습니다

인 텐트 필터를 사용하여 해당 브로드 캐스트 리시버를 매니페스트 파일에 등록합니다 인 텐트 필터에서 액션과 카테고리를 사용하고있는 것을 볼 수 있습니다 특정 동작 값을 생성하는 동안 고유 한 문자열을 제공 할 수 있습니다 이것은 당신 자신의 커스텀 스트링입니다 그리고 너는 DEFAULT 카테고리를 부여해야합니다

이제 활동으로 돌아 가면 그 특정 버튼을 클릭하면 의도와 그 특정 의도에 대한 나는 카테고리를 설정하고 액션 값 그리고 관찰하면 카테고리 값과 액션 값 브로드 캐스트 리시버를 등록하는 동안 사용한 것과 정확히 똑같습니다 매니페스트 파일에 다음 메소드는 sendBroadcast ()이며 인 텐트를 그 특별한 방법에 대한 논쟁 인 텐트 브로드 캐스트가 트리거됩니다 그래서 지금 이 특정 버튼을 클릭하면 토스트 메시지가 트리거됩니다

방송 수신의 이러한 특정 트리거링은 다른 응용 프로그램 이를 위해 나는 다른 응용 프로그램을 만들었습니다 특정 적용 나는 그것이 활동을 포함하고 있다는 것을 제외하고는 아무것도 없다 활동에는 버튼이 포함되어 있으며 해당 버튼을 클릭하면 의도를 유발합니다 코드가 동일하다면, 정확히 동일합니다

이전 신청서에 사용되었습니다 이 특정 응용 프로그램은 또한 다른 앱에 등록 된 브로드 캐스트 리시버를 트리거하십시오 우리에게 보여줘 그 행동 이것은 다른 앱이고 "방송 보내기"를 클릭하면됩니다 기본적으로 다른 앱에있는 브로드 캐스트 수신자를 트리거합니다

그래서 이것을 통해 당신은 분명히 방송에 관계없이 그것을 만들 수 있습니다 리시버가 존재하면 카테고리와 액션 값을 올바르게 전달하면 브로드 캐스트 리시버가 항상 트리거됩니다 그러나이 문제는 시나리오는 트리거를 실행할 작업 및 카테고리 값을 알고있는 모든 앱입니다 해당 브로드 캐스트 리시버가 트리거 할 수 있습니다 이 일이 일어나길 원치 않으면 어떡하지? 브로드 캐스트 리시버를 보호하고 싶습니다

모든 XYZ 앱은 특정 방송 수신기를 트리거 할 필요가 없습니다 그에 대한 내 보낸 것으로 호출 된 속성을 사용할 수 있습니다 너를 등록하면 매니 페스트 파일의 브로드 캐스트 리시버가 내 보낸 파일과 함께 선언합니다 속성 세트는 false와 같습니다 이렇게하면 브로드 캐스트 리시버가 앱 외부에서 들어오는 방송 의도에 반응합니다

이것이 하나의 측면이다 귀하의 방송 수신기 보안의 그러나 반대 시나리오도있을 수 있습니다 반대로 최악의 시나리오는 기본적으로 어떤 의도의 방송도 원하지 않는다는 것입니다 앱 밖에서 발생하는 것은 앱 하나에 브로드 캐스트 리시버가 있다고 가정하는 것입니다

또한 앱 XYZ에는 동일한 작업을 수행하는 브로드 캐스트 수신기가 있습니다 그리고 catagory values와 만약 내가 브로드 캐스트 인텐시티가 발생한다면 모든 브로드 캐스트 수신기가 트리거됩니다 당신은 그런 일이 일어나기를 원하지 않습니다 너는 그 의도를 원해 방송은 앱 1로만 제한됩니다

그 때문에 당신은 LocalBroadcastManager가 브로드 캐스트를 보냅니다 인 텐트 방송이 특정 앱에만 국한되며 앱 외부로 전파되지 않습니다 하나 그래서 우리가 데모에서 이것을 보도록하겠습니다 나는 첫 부분을 보게 될 것입니다

내 보낸 속성은 false와 같아서 앱을 다시 실행합니다 이제 내가 할 때 방송을 보내면 해당 특정 방송 수신기가 트리거되지 않습니다 응용 프로그램에서 가져온 값이 false로 설정 되었기 때문에 그러나 응용 프로그램이 트리거됩니다 따라서이 특정 버튼을 클릭하면됩니다

방송 수신기가 트리거되고있는 것을 관찰하고 다른 응용 프로그램과 방송을 보내면 방송을 볼 수 있습니다 왜냐하면 이 값의 false는 false로 설정됩니다 이제 내가 사실로 만들고 내가 갈거야 다른 응용 프로그램에 LocalBroadcastManager를 만듭니다 나를 초기화 시키겠습니다

그것은 localBroadcast 액티비티의 onCreate 메소드에 있습니다 getInstance는 getApplicationContext 문맥을 전달한 다음 이것을 사용한다 localBroadcastManager를 사용하여 브로드 캐스트를 보냅니다 그리고이 코드를 실행시켜 보겠습니다 이 특정 버튼을 클릭하면 브로드 캐스트가 트리거되지 않습니다

내 보낸 값이 true로 설정됩니다 무슨 일이 일어나고 있는지 방송은이 특정 응용 프로그램을 넘어서지 않습니다 LocalBRTester (앱 이름) 왜 이럴거야? 왜냐하면 만약 당신이 백퍼센트 귀하가 구현 한 브로드 캐스트 리시버가 귀하의 자신의 응용 목적과 그 특정 방송의 가능성은 없습니다 리시버가 앱 외부 어디서나 실행되거나 원하는 경우 불필요하게 앱 컨텍스트 외부에서 의도를 유발하지 않도록 항상 LocalBroadcastManager를 사용할 수 있습니다 그래서 우리가 토론 한 내용 지금까지이 동영상을 포함하여 이전 동영상에서 일반 방송으로

Android는 또 다른 중요한 유형의 브로드 캐스트를 제공합니다 주문 방송 (Ordered Broadcast)이라고합니다 주문한 방송을 듣기 위해 계속 지켜봐주십시오 (다음 비디오에서) 그 이 특정 비디오가 끝날 때까지 우리를 데려오고, 잊지 마세요 의견 공유를 좋아하십시오

비디오를 구독하고 채널에 가입하십시오

Broadcast Receivers – Part 4, Ordered Broadcast Receivers

안녕 얘들 아 CodeTutor 여기 내 이름은 Anil Deshpande입니다 이전 이벤트가있을 때마다 본 비디오 발생, 당신은 그 특정 만들 수 있습니다 방송 수신기에 응답합니다

브로드 캐스트 리시버를 등록 할 수 있습니다 매니페스트 파일 또는 암호 그러나 이것이 항상 시나리오가 하나만있는 시나리오 응답 할 특정 브로드 캐스트 수신기 이벤트에 너는 더 많은 것을 가지고 있을지도 모른다 하나의 방송 수신자보다 모든 방송 수신기에서 이벤트가 발생합니다

듣기 위해 등록되었을 수도 있습니다 같은 사건 그래서이 세 명 모두 방송 수신기가 응답합니다 근데 뭐 주문을 관리하려면 이들 특정 방송 수신기 방아쇠를 당겼거나 메커니즘이있다 내가 통제 할 수있는 첫 번째 특정 브로드 캐스트 수신자가 트리거되고 첫 방송 수신기까지 그 처리를 완료한다 나는 그것을 원하지 않는다

두 번째 방송을보기 위해 만 첫 번째 완료 후 두 번째 가져 오기 트리거 된 다음 두 번째 완료 후 세 번째도 트리거됩니다 나는 또한하고 싶습니다 제 1 방송 수신기에서 데이터를 처리한다 그런 다음 두 번째 브로드 캐스트로 전달했습니다 수신기에서 처리 한 후 두 번째로 자세히 처리하고 싶습니다

제 3 방송 수신기 이것을하기 위해 우리는 Ordered라고 불리는 것을 사용합니다 방송 수신기 그래서이 비디오에서 우리는 이것을 달성하는 방법에 대한 데모를 볼 수 있습니다 내가 원하는 코드를 보여주기 전에 이것이 어떻게 달성되고 있는지 이해한다

데모 나는 두 가지를 구현할 것이다 방송 수신기 및 그 때 나는하고자했다 인 텐트를 트리거하고이 인 텐트가 이 두 개의 방송 수신기를 방아쇠를 당겼다 처음에는 그것들은 매니페스트에 등록되어있다 행동으로 파일하다 그리고 하나이며 같은

그리고 이러한 특정 방송 수신기 방아쇠를 당겼다 기본적으로 어떤 것을 기록 할 것인가? 브로드 캐스트 수신기가 처음으로 트리거 됨 이동 경로 형식 빵 부스러기 형식은 일반적으로 파일입니다 일반적으로 보는 네비게이션 시스템 메뉴 기반 UI에서 우리는 동일한 이동 경로 형식을 사용하여 특정 순서로 브로드 캐스트 수신기가 트리거됩니다 여기에 코드를 보여 드리겠습니다

나는 가지고있다 관찰 할 수있는 방송 수신기 방송 수신기 둘 다에서 방송 수신기 2, 로직 onReceive 메서드는 기본적으로 빵 부스러기를 만들고 그것에 기록하기 LogCat 나는에 대한 링크를 주었다 설명 섹션의 소스 코드 아래 동영상에서 다운로드 할 수 있습니다 코드를 작성하고 로직을 검토하십시오

그럼 내가 활동이 있고, 특히 나는 단추가 있고 나는 해당 버튼을 클릭하십시오 기본적으로 방송을 보내면 내가 등록한 목록 파일을 관찰하다 동일한 브로드 캐스트 수신기들 동작 및 범주 값 그럼 내가 이걸 실행하게 해줘 버튼을 클릭하면 방송 수신기 하나와 방송 수신기 2 개는 별도로 실행됩니다

그리고 네가 간다면 다시 매니페스트 파일로 돌아가서 주문을 변경하고 다시 실행하십시오 어떤면에서는 단지 다음 순서로 방송 수신기는 매니페스트 파일에 영향을 줄 수있는 그들이 실제로 얻는 순서 실행 이제 클릭하면 볼 수 있습니다 방송 수신기가 두 대 먼저 시작한 다음 시작했다 나는 인 텐트 필터의 우선 순위 값은 항상 정수이고 방법은 우선 순위가 높은 작품은 높은 작품 이 경우 방송에서의 우선 순위 수신기 하나가 우선 순위가 높습니다

일찍 처형 될테니까 다시 실행하십시오 방송 수신기 하나가 더 높다 우선 순위 그래서 그것이 expected 점점 명령을 계속 지키겠다 그것들은 명단에 선언되어있다

파일은 같지만 우선 순위는 변경하십시오 당신 이제는 방송을 볼 수 있습니다 수신기 2가 먼저 실행되고 다음 방송 수신기 하나 조차 나는 우선 순위를 바꿨지만 매니페스트의 브로드 캐스트 리시버 파일을 열면 순서가 변경됩니다 방송 수신기는 트리거 됨

그들은 유발되지만, 그들은 얻는다 독립적으로 실행됩니다 그러나 이것은 아니다 충분한 나는 기본적으로 통제하고 싶다

하나로부터 인 텐트 전파 방송 수신기 두 번째 브로드 캐스트 리시버로 전송합니다 에 내가해야 할 일은 다음과 같다 대신 버튼의 onClick 메서드 sendBroadcast라는 메소드를 사용하여, 다른 방법으로 sendOrderedBroadcast 너는 사용해야 해 그 특별한 방법과 매개 변수 그것이 취하는 것은 의도와 문자열입니다

허가 우리는 아무 것도 필요로하지 않기 때문에 이 권한을 특수화했다 특별한 경우 난 그냥 null을 전달할 수 있습니다 값 그래서이 강령을 실행할 수 있습니다 그럼 내가 시켜줘

이 특정 버튼을 클릭하십시오 첫 번째 방송 수신기에서 그것을 보아라 우리는 시작으로 출력을 얻고있다 -> 방송 수신기 하나 자동으로 컨트롤이 방송 수신기 2, 그리고 방송 수신기에서 우리는 이전의 breadcrumb 값은 시작 -> BroadcastReceiver1 그리고 나서 나는있다 태그를 추가합니다 그래서 그것은 방송 수신기 2입니다

그래서 우리가 달성 할 수 있었던 것 첫 번째 브로드 캐스트 수신기가 트리거되고, BroadcastReceiver1의 우선 순위 더 높고 처리가 끝난 후 방송 수신기의 데이터 하나는 자동으로 두 번째 방송 수신기가 트리거됩니다 때까지 BroadcastReceiver1 2 개의 방송 수신기를 완성한다 처형되지 않습니다 그리고 전송할 수 있습니다 방송 수신기 1에서 처리 된 데이터 BroadcastReceiver2

당신이 원한다면 내 말은 완전한 루프백이야 브로드 캐스트 리시버를 트리거 한 후 이 특정 버튼을 클릭하면, 브로드 캐스트 리시버로 가야한다 하나 그리고 나서 방송 수신기 2와 마지막으로 주요 활동으로 돌아온다 또 다른 방법이 있습니다 이것은 sentOrderedBroadcast의 오버로드 된 메소드

당신은 sentOrderedBroadcast, 나는 의도, 권한이 null이고 현재 익명의 내부 클래스를 만드는 방송 수신기 이게 뭐야? 방송 수신기는 그렇게 할 것이다 두 번째에서 빵 부스러기를 받다 방송 수신기, 그리고 마지막으로 첨부 다른 태그 다른 태그 대 / 소문자는 MainActivity입니다 그리고 마지막으로 그 특정 빵 부스러기를 LogCat

그럼 내가 이걸 실행하게 해줘 이제 클릭 할 때 이 특정 버튼을 관찰 할 것입니다 방송 수신기에서 시작 -> 방송 수신기 하나를 누른 다음 방송 수신자 2에 propepagtes 결국 방송 수신기 2 후, 그것은 MainActivity에옵니다 그래서 전달하는 방송 수신기 여기 sendOrderBroadcast에 대한 인수로, 기본적으로 최종 콜백 브로드 캐스트 최종 의도를 얻는다

그게 가져온다 우리는이 특별한 비디오의 끝까지 댓글 공유를 좋아하는 것을 잊지 마세요 동영상을보고 채널을 구독하십시오 갖다 걱정하다

Broadcast Receiver – Part 5, The Finer Nuances

안녕하세요 여러분 codeCodeTutor 여기 내 이름은 Anil Deshpande입니다 이게 마지막이야

방송 개념에 관한 비디오 내가 이야기 할 수신기들 당신이해야 할 뉘앙스의 일부 브로드 캐스트 리시버를 사용하는 동안 귀하의 신청서에 아주 내가 얘기하고 싶은 첫 번째 요점은 메인 쓰레드 나 UI 스레드입니다 카운터 일 수 있습니다 사람들의 대부분을위한 intinant 브로드 캐스트 수신기에는 아무 것도 없습니다 UI 그래서 당신은 생각할 수 있습니다

방송 수신기가 실행 중입니다 다른 작업자 스레드에서는 케이스 네가 잘못하면 그렇게 할 수있어 응답하지 않는 응용 프로그램으로 연결됩니다 이것을 이해하고 집으로 운전하는 데 오류가 있습니다

이 특별한 요점은 내가 빨리 얻을 것이다 데모로 나는 다음 중 하나를 사용하고있다 내가 사용했던 이전 프로젝트 이전 동영상 보시다시피, 저는 여기에 활동을하고 이것을 클릭하십시오 특정 버튼, 나는 의지 그 의도가 여기서 방송됩니다

스레드 ID를 보여줍니다 내가하고있는 것 활동을 시작할 때 나는 시작이다 스레드 ID를 트리거하고 내 방송 수신기가 시작됩니다 다시 한번 그 스레드 ID를 토스트합니다 둘 다 그들 중 동일한 스레드에서 실행 중 이 경우 주 스레드입니다

그 스레드 ID를 하나 가져와야합니다 그리고 같은 두 가지 주요 활동 및 방송 수신기에서 나는 할 것이다 앱을 실행하면 볼 수 있습니다 주 활동 스레드 ID는 1이고, 언제 나는이 특정 버튼을 클릭한다

toast는 스레드 ID를 다음과 같이 다시 표시합니다 브로드 캐스트 리시버가 실행되는 하나 주요 실 그래서 Android 브로드 캐스트 리시버 더 걸리는 일은해서는 안된다 10 초 이상 그리고 다음 중요한 포인트 방송 수신자가 onReceive () 실행, 그것은 고려됩니다 끝내라

이것은 심각하다 당신이 사용하는 방식에 암시 방송 수신기 일반적으로 브로드 캐스트 리시버 구현 및 오버라이드 onReceive () 메소드 취하다 당신이 처형을 시작했다고 onReceive 메소드와 어딘가에 중에서 기본적으로 원격지에 연결하려고합니다 서비스를 바인딩하고 싶은가? 서비스

그러나 시간 서비스가 돌아올 때까지 뒤로 방송 수신자 실행 완료 및 onRecieve 메소드가 완료됩니다 그래서 그것이 이유입니다 방송 수신기는 비동기 호출과 방송 수신기로부터의 서비스 그러나 당신은에서 서비스를 시작할 수 있습니다 방송 수신기 방송 수신기가 해킹되기 쉽기 때문에 항상 그들을 확보해야합니다

두 가지가있다 그 (것)들을 확보하는 간단한 방법 하나는 세트는 거짓에 공물을 내 보냈다 다른 방법은 로컬 브로드 캐스트를 사용하는 것입니다 인 텐트 전파를 제한하는 관리자 앱 넘어 이 두 가지 간단한 두 가지 내가 설명한 방법론 이 이전 동영상은 토론을위한 커튼 폐쇄 CodeTutor의 방송 수신기는 지금

다음 주제는 내가 될 것입니다 토론은 콘텐츠 제공 업체입니다 그 이 특정의 끝으로 우리를 데려다 준다 동영상을 잊지 마세요 의견 공유를 좋아합니다 비디오 및 채널 구독 잘가, 안녕

Android – Static Broadcast Receivers

안녕하세요, 저에게 다시 오신 것을 환영합니다 안드로이드 튜토리얼 시리즈 및이 튜토리얼은 내가 당신에게 말할 것입니다

내 정적 방송 수신기 이전 비디오 내가 당신에게 소개를했습니다 방송 수신기들 나는 한 가지 유형의 동적 인 브로드 캐스트 수신기 방송 수신기 및 그 비디오 I 그 역동적 인 방송을 너에게 말했어 리시버는 응용 프로그램은 특정 상태를 한 번 듣습니다 해당 응용 프로그램이 실행될 때까지 응용 프로그램을 실행하지 않는 한 그 특별한 것을 듣고있을 것입니다 행동 또는 수신기 또는 무엇이든 그러나 일단 신청서가 닫히면 응용 프로그램은 더 이상 듣지 않습니다

그 수신기, 그 행동들, 그러나 무엇 신청서를 작성하려면 그 행동들과 수신기들에 귀를 기울이십시오 귀하의 응용 프로그램이 가까운 경우에도 여기에 또 다른 유형의 방송 수신기와 그들은 정적 방송 수신기 방송 수신기는 애플리케이션이 일부 애플리케이션을 듣게한다 특정 이벤트 휴대 전화에서 응용 프로그램이 실행되고 있지 않습니다 그래서 볼 수있는 가장 일반적인 예가 하나 있습니다 일상 생활에서 알림, 푸시 알림 전화 창문에 그렇게 생겨서

그것은 특히 귀하의 휴대 전화는 귀하의 응용 프로그램입니다 끊임없이 수신기가 있고 한 번 시스템 서버에서 알림을 받고 있습니다 푸시 알림을 표시합니다 응용 프로그램이 실행되고 있지 않은 경우 정적 브로드 캐스트 수신기의 예가 될 수있다 하지만 내가해야 할 한 가지는 여기에 안드로이드는 언급하지 않는다

정적 브로드 캐스트 리시버 사용을 권장합니다 대신에 그들은 다른 기술을 제공하고 기술은 화재 기본 작업 디스패처입니다 그게 너에게 일자리를 예약해야 해 그 특별한 일을 성취 할지라도 응용 프로그램이 실행되고 있지 않습니다 내가 다룰 내용이야

내 안에 다음 동영상이지만이 동영상에서는 정적 방송 수신기에 대해 이야기 해주세요 어떤 경우에는 당신은 정적 방송을 사용해야한다 수신기 및 당신은 지금 당신이하지 않습니다 내가 가지고있는 firebase 작업 발송자를 사용해야한다 언급 했으니 곧 시작하겠습니다

무엇을 먼저 할 것인가? 지금 내가 만든 응용 프로그램이 Wi-Fi 상태를 청취합니다 언제나 내 구멍의 변화 부인이나 그 사용자의 영예를 내 응용 프로그램의 Wi-Fi 이 주와 우물을 듣고있다 무엇이든지 행동을 취하십시오 응용 프로그램이 너무 먼저 이야기하고 있습니다

모두 내부의 미학 수업을 만들어 보자 방송을 비웃기 위해 연장 될 리시버는이 클래스를 스타라고합니다 교육은 이것이 이 활동으로 공연 할 예정입니다 그것은 방송에서 확장 설명합니다 물론 수신기가 있어야합니다 여기에서 하나의 메소드를 오버라이드하십시오

이제 문제가 될 것입니다 거기 나는 무엇이든지 나는 수행해야만한다 먼저 내 휴대폰으로하고 싶다 다시 나는 스위치 케이스를 다음과 같이 사용할 것이다 나는 이전 비디오에서 언급했다

그리고 여기 스위치는 수정 및 내 경우는 안드로이드 것입니다 닷 닷망 Wi-Fi 도트 상태가 너무 바뀌 었습니다 이것은 내 응용 프로그램의 동작입니다 내가 Wi-Fi 였을 때 듣는 시간은 언제입니까? 상태가 변경되면 내 신청서가 가장 구체적인 작업을 수행하십시오 일부는 그래서 내가 무엇을 할 것인가를 표시 할 것입니다 토스트 메시지 문맥과의 접촉을 환영한다

이 인수에서부터 그렇게 지나치다 컨텍스트와 내 메시지를 보자 환영합니다 길이는 짧습니다 길이는 충분하고 나는 그것을 만들 것이다

표시되는 화면에 표시됩니다 그 다음에 나는 물론 시작할 것이다 내 활동을 시작하고 그 목적을 위해 내가 가지고있는 노인을 사용할거야 이전 강의에서 언급 한 의도 된 의도는 새로운 것과 같습니다 의도와 여기에 나는 컨텍스트 컨텍스트와 클래스 물론이 경우에 시작하고 싶다

법적 활동에 관해서는 내가 그렇게 할거야 주된 활동 두 발톱과 물론이 변수를 변경해야합니다 의도가 이미 정의되어 있기 때문에 이 범위는 10 20에서 본 것입니다 10에서 그리고 나서 나는 수용체 -1 깃발 여기이 깃발이 할 일은 이후로 내 활동을 시작합니다 활동을 시작하려면 응용 프로그램 측면에서 컨텍스트 내 응용 프로그램이 될거야 이후 내가 그렇게해야 시스템 호출에서 시작 여기에 플러그를 추가하십시오

그 깃발은 도망친 활동이 될거야 도쿄 그래, 지금 내가 뭘할지 알았어 다시 시작과 그 목적을 위해 문맥을 사용하거나 활동을 방해한다 나는 그렇게 할 의향을 전달할 것이다 이것은 지금 활동을 해칠 것입니다

등록 또는 등록되지 않은 수신기를 I 내 이전 비디오에서했기 때문에 그게 가장 좋은 경우는 특별히 폴더 동적 내가 할 일을하지 않기 때문에 정적 방송을 위해 나는 내 안드로이드 매니페스트 파일을 열면 너는 앱 패키지에서 해당 파일을 찾습니다 매니페스트 폴더에 있고 그 드로이드가 의료 파일과 당신이 무엇을 할 것입니다 수신기의 탭을 열고 닫으십시오 그 태그와 그 이름을 써야 해 방송 클래스 정적 방송 당신이 만든 수신기 구름 당신의 주요 활동 그래서 당신이 당신의 표시에 호소하라 그 제안은 내가 가지고 있기 때문에 하나의 브로드 캐스트 수신기 클래스 그래서 나는 언론에 그것을 입력 눌러 아마 당신은 몇 가지 수업을 선택해야합니다

우리가 여기에 추가하고 싶은 수업 개장과 폐회 사이에 분명히 내가 의도 필터를 추가 할 것이다 그리고 그 필터에 내 행동을 내가 만들고 싶은 행동 이 경우에는 활동을 경청하십시오 안드로이드 의미와 그 행동이 될 것입니다 내가 언급 한 그 사건과 비슷한 여기에 복사하여 붙여 넣으겠습니다 그래, 내가 지금까지 그렇게 해왔다 내가 한 간단한 응용 프로그램을 완료 하나의 응용 프로그램을 만들었습니다

활동과 나는 그것을 만들었고 언제 정적 공용 클래스가 응용 프로그램이 아닙니다 방송에서 연장되는 여기에 언급 된 수신기 내 시스템의 의도 응용 프로그램은 너무 듣고 있어야합니다 Wi-Fi 상태 변경을 선택했습니다 Wi-Fi의 상태가 보일 때마다 내 신청서가 시작되고 그 다음에 나는 그것을 등록했다 내 안드로이드 매니 페스트 파일에 브로드 캐스트 수신기 스 태그 및 필터 필터 및 리시버 개방 및 투자 닫는 태그 나는 행동을 언급했다

내 응용 프로그램이 너무 듣고있다 이것은 내 응용 프로그램이 어떻게 생겼는지입니다 이제이 응용 프로그램을 테스트 해 봅시다 테스트 목적으로 내 전화를 다시 사용하십시오 그래서 그것을 실행하자

그리고 나는 그렇게 잘 시행하고있다 내 응용 프로그램을 실행하고 있지만 전에 내가 한 가지 언급하고자하는 것은 여기에 부동산 언더 스코어 변경을 사용했습니다 상태는 어떤 행동이 아니라도 변화를 강조한다 Android 기기에서 인식하는 그래서 대신 상태 변경을 사용해야합니다 당신은 변화를 사용해야한다

변경은 올바른 동작이므로 확인해 보겠습니다 실행이 응용 프로그램을 실행하자 응용 프로그램이 내 설치하고 있습니다 전화 너무 나는 한동안 그것을해야하고 나는 그래 내 응용 프로그램을 실행하면 나는이 신청서를 닫을 것입니다

이 신청서를 닫은 후에 내 Wi-Fi 상태를 어떻게 바꿀 것인가? 내 Wi-Fi 상태를 어떻게 변경합니까? 나는이 Wi-Fi를 닫을 것이고 내가 가지고있을 때 내 Wi-Fi를 닫으면 응용 프로그램이 백그라운드에서 실행 중입니다 환영한다고 말하면서 네가 컨셉을 잡았고 이 튜토리얼을 좋아해주세요 내 채널 및 공식 채널 구독 그때까지 더 흥미 진진한 튜토리얼 케어

Android Oreo Background Execution Limits

항상 백그라운드 프로세스를 실행해야합니다 최신 콘텐츠를 위해 서버와 동기화 애플리케이션의 데이터를 여전히 계산 중입니다

그러나 백그라운드 프로세스를 실행하면 운영 체제에 문제가 발생합니다 매우 중요한 배경 작업 요청을 한 20 개의 응용 프로그램이 있더라도 사용자가 사용중인 응용 프로그램은 부드럽게 실행해야합니다 Android Oreo는 이전과는 완전히 다른 접근 방식을 도입했습니다 사람들이 백그라운드 서비스 문제를 다시 생각하게합니다 일부 앱은 백그라운드에서 임의로 실행할 수 없습니다

여기에는 암시 적 브로드 캐스트를 통해 실행을 시작하는 응용 프로그램이 포함됩니다 백그라운드에서 여러 서비스를 여는 앱 영향을받는 API에 대한 간단한 개요를 살펴 보겠습니다 오리엔테이션 API도 영향을 받았지만 이제는 그것에 대해 이야기하지 않겠습니다 이 기사에 첨부 된 문서 링크를 통해 확인할 수 있습니다 자세한 내용과 관련된 위치 업데이트 이 변경 사항은 Android O 용으로 설계된 모든 애플리케이션에 적용됩니다

애플리케이션이 Android O 용으로 설계되지 않은 경우에도 사용자는 이러한 제한을 계속 사용할 수 있습니다 어쨌든 이러한 변화에주의를 기울여야합니다 백그라운드 동작의 첫 번째 변경은 서비스에 반영됩니다 백그라운드 호출로 서비스를 호출하면 IllegalStateException이 발생합니다 이 변경은 앱이 표시되거나 전경에있을 때 열리는 서비스에는 영향을 미치지 않습니다

바인딩 서비스에는 영향을 미치지 않습니다 다음과 같은 상황에서는 응용 프로그램이 포 그라운드에 존재하는 것으로 간주됩니다 앱이 프론트 데스크에서 백 오피스로 이동하면 서비스가 종료되기 전에 잠시 유예 기간이 있습니다 stopSelf 지시문을 실행 한 것처럼 서비스가 종료됩니다 이 변경 사항은 모든 서비스에 영향을 미칩니다 IntentService가 영향을 받습니까? 음, 네

PendingIntent 서비스가 영향을 받았습니까? 생성시 영향을받지 않지만 전송시 영향을받습니다 백그라운드에서 켜고 프론트 데스크로 푸시하고자하는 서비스조차도 영향을받습니다 좋은 소식은 서비스를 저장하는 여러 가지 방법이 있다는 것입니다 앱이 알람 시계 앱이 아니라면 그렇지 않으면 케이스의 90 %에서 최선의 선택 백그라운드 서비스를 예약 된 작업으로 바꾸십시오 백그라운드에서 더 이상 서비스를 열 수 없지만 그러나 작업 스케줄은 백그라운드에서 작업을 수행 할 수 있습니다

이를 위해서는 프레임 워크가 모든 스케줄 작업과 그 제약 사항을 고려해야합니다 그리고 어떤 스케줄 작업이 실행되어야하는지 결정하십시오 작업을 예약하는 데 사용할 수있는 몇 가지 솔루션이 있습니다 신청서의 필요에 따라 다릅니다 아래의 관련 텍스트를 첨부하여 다른 장단점을 설명했습니다

하지만 내 충고를 듣고 싶다면 Firebase JobDispatcher를 사용하는 것이 좋습니다 그리고 새로운 Job IntentService Job IntentService는 IntentService를 쉽게 대체 할 수 있습니다 다음은 임시 서비스 목록입니다 몇 가지 특별한 경우가 있습니다 여기에있는 앱이 일시적으로 화이트리스트에 추가됩니다

짧은 시간 안에 행동하는 것이 마치 프론트에서와 같다 서버 데이터가 변경 될 때 작업을 트리거하려는 경우 귀하의 서버 및 응용 프로그램에서 고려하십시오 Firebase 클라우드 메시징 배포 우선 순위가 높은 FCM 메시지를 사용하는 경우 이 메시지가 즉시 전송됩니다 그 시간에 시스템이 멈추더라도 동일합니다 또한 서비스 화이트리스트를 쉽게 사용할 수 있습니다 서비스를 열 수 있습니다

응용 프로그램이 포 그라운드에있는 것처럼 보이게하십시오 일반적인 우선 순위 FCM 메시지 인 경우 그런 다음 사용자가 장치 화면을 열면 메시지가 전달됩니다 또는 유휴 유지 관리 창에서 전달 하지만 시작 서비스 목록에 포함시킬 수는 없습니다 응용 프로그램이 높은 우선 순위 및 보통 우선 순위 정보를받는 경우 한 가지 방법은 서비스를 시작하는 것입니다 어떤 이유로 든 실패하면 그런 다음 백업 시나리오를 활성화하십시오

스케줄링 작업 켜기 사용자가 서비스와 상호 작용하거나 서비스를 모니터링하려는 경우 프론트 데스크 서비스를 만들 수 있습니다 프론트 데스크 서비스는 지속적인 화면 알림 기능을 제공합니다 이것은 서비스가 실행 중임을 사용자에게 알립니다 다양한 타이밍 어플리케이션과 네비게이션 어플리케이션이 일반적입니다 효율적인 콜 서비스 어플리케이션의 예 문제는 과거에는 "백그라운드에서 열린 프론트 데스크 서비스"가 더 이상 작동하지 않는다는 것입니다

새 API를 사용하여 프론트 데스크 서비스를 켜야합니다 첫 번째 단계는 새로운 startForegroundService 메소드를 사용하는 것입니다 이 메소드로 작성된 백그라운드 서비스는 즉시 포 그라운드로 푸시되어야합니다 서비스 내부에 알림을 작성하십시오 프런트 데스크 알림은 항상 중요도가 더 낮거나 높아야합니다 사용자가 볼 수 있도록 중간 중요성을 가질 수 없다

마지막 단계는 서비스가 startForeground 명령을 사용하도록하는 것입니다 그리고 당신이 방금 프론트 데스크에 자신을 밀어 넣은 통지 프론트 데스크 서비스를 켜려면 PendingIntent가 필요할 경우 PendingIntent의 새로운 getForegroundService 메소드를 사용할 수 있습니다 그런 다음 프론트 데스크 서비스로 홍보하는 것과 같은 방식으로 위의 방법 중 어느 것도 적합하지 않은 경우 숙제 연기를 고려할 수도 있습니다 앱이 프론트 데스크에 나타날 때까지 새로운 제약 조건 하에서 애플리케이션을 테스트하려면 또한 아래 링크를 adb 명령과 함께 연결했습니다 앱이 백그라운드에서 실행되도록 허용 앱의 배경 제한을 적용합니다

이제 암시 적 브로드 캐스트 수신기의 한계에 대해 이야기합니다 암시 적 브로드 캐스트를 수신하는 정적으로 결정된 수신기 이 브로드 캐스트를받지 못함 암시 적 브로드 캐스트에는 대상 기능 속성이 없습니다 정적 방송 수신기는 AndroidManifest에 정의되어 있습니다 Android Oreo 이전 암시 적 브로드 캐스트는 구성 요소를 수신하는 Manifest의 모든 것을 트리거합니다 연구 제한 사항으로 인해 메모리 지터가 발생합니다

이 시점에서 브로드 캐스트가 트리거되기 때문에 많은 응용 프로그램에서 많은 다른 구성 요소 정적 암시 적 브로드 캐스트 수신기를 다음과 같이 바꿀 수 있습니다 몇 가지 예외가 있으므로이 목록을 먼저 확인하십시오 방송이이 목록에있는 경우 영향을받지 않습니다 정상적으로 계속 작동합니다 이 목록에는 헤드폰 삽입을위한 지역 설정 변경 사항이 포함되어 있습니다

자세한 내용은 아래 첨부 된 링크를 참조하십시오 브로드 캐스트가이 예외 목록에없는 경우 작업을 사용하여 대체 할 수 있습니다 채용 정보는 이러한 조건 중 일부는 Android O에 추가되었습니다 특히, 컨텐트 프로 바이더 옵저버는 여러 작업을 트리거 할 수 있습니다 다양한 환경을 다루기 위해 예를 들어, 사용자가 전화에 새 사진을 저장하면 브로드 캐스트 설정이 준비되었을 때 응용 프로그램의 일부가 이미 작동중인 경우 다이나믹 브로드 캐스트 리시버로 전환 할 수 있습니다

즉, 브로드 캐스트 리시버 코드를 매니페스트 밖으로 옮기는 것입니다 그런 다음 런타임에 생성, 등록 또는 등록 취소 할 수 있습니다 내가 지금하고있는 것처럼 이러한 시나리오는 백그라운드 처리에 더 초점을 맞추었지만 그러나 프런트 엔드 사용자는 이러한 이점을 경험할 수 있습니다 이는 회피가 적고 충돌이 적음을 의미합니다 고가의 고속 하드웨어를 사용할 수없는 사용자 그것이 가져 오는 이익은 특히 인상적입니다 방금 여러 전략과 API 변경 사항에 대해 이야기했습니다

응용 프로그램이 영향을받는 경우 더 많은 것을 배우고 코드 예제를 배우기를 원한다면 첨부 문서보기