BroadcastReceiver 마스터 테스트


이 섹션 소개

이 섹션에서는 Android의 네 가지 주요 구성 요소 중 세 번째인 BroadcastReceiver(브로드캐스트 수신기)를 배우겠습니다. 시작 문장을 쓰는 방법, 그래서 가지고 있는 안드로이드 기본서 두 권을 뒤져보았더니 어느 책에도 BroadcastReceiver에 대한 소개가 없다는 것을 알게 되었습니다. 우연인지, 아니면 작가가 이 일이 많이 사용되지 않아서 이야기할 필요가 없다고 느끼는 것인지 모르겠습니다! 하지만 그들은 그것에 대해 이야기하지 않지만 Xiaozhu는 그것에 대해 이야기할 수 있고 그는 그것에 대해 자세히 이야기해야 합니다! 자, 이제 이 섹션을 시작하겠습니다~ PS: 그런데 Android 공식 웹사이트에서 API Guides -> App Components를 클릭했는데 BroadcastReceiver의 흔적을 찾을 수 없었습니다. 그럼 BroadcastReceiver를 검색해 보세요. BroadcastReceiver


1. BroadcastReceiver가 도대체 ​​뭔가요?

답변: 방송은 말 그대로 방송으로 번역됩니다. BroadcastReceiver를 이해하는 데 도움이 되는 생생한 예를 들어보겠습니다. 그 당시 각 학급에는 벽에 대형 스피커를 걸어 학교에서 책을 옮기기 시작할 때와 같은 공지 사항을 방송했습니다. "각 수업마다 몇 명의 반 친구를 찾아 교무실에서 책을 가져오세요." 이 방송이 전송되면 모든 학생이 동시에 이 방송 알림을 받게 됩니다. 받았지만 모든 학생이 책을 옮기는 것은 아닙니다. 일반적으로 책을 옮기는 사람은 학급의 "강한 남자" 그룹입니다. 방송이 끝나고 책을 다시 옮기러 출발하는데!
——위는 방송 전달의 매우 생생한 예입니다.
큰 스피커--> 방송 보내기--> 모든 학생이 방송을 수신할 수 있습니다-->Hercules가 방송을 처리합니다.
Back 우리의 개념은 BroadcastReceiver입니다. 실제로 애플리케이션 간의 글로벌 스피커, 즉 통신 수단입니다. 시스템 자체는 배터리가 부족하거나 충분한 경우, 시작 직후, 헤드폰 연결, 입력 방법 변경 등 여러 번 방송을 보냅니다. 이러한 시간이 발생하면 시스템은 브로드캐스트를 전송합니다. 이를 시스템 브로드캐스트라고 합니다. 이 방송 중에 시스템을 켠 후 백그라운드에서 비밀리에 서비스를 실행하는 등 몇 가지 작업을 수행하세요 ~ 하하, 지금은 다음 작업만 수행하면 됩니다. 스타트업 모니터링을 위해 BroadcastReceiver를 등록하세요. 스타트업 방송을 받을 때 은밀한 작업을 해보세요~ 물론, 우리가 직접 브로드캐스트를 보낼 수도 있습니다. 예를 들어, 서버로부터 푸시 정보를 받은 후 사용자는 다른 곳에서 로그인한 다음 강제로 로그오프하고 다시 돌아가야 합니다. 로그인 인터페이스 및 다른 곳에서 로그인하라는 메시지 ~ 물론 방송이 우리에게 제공하는 이점을 모두가 이해할 수 있도록 나중에 간단한 예를 작성하겠습니다 ~


2. 두 가지 유형의 방송:

1.png


3. 시스템 방송 수신

1) 방송을 등록하는 두 가지 방법

앞서 언급했듯이 시스템은 특정 시간에 해당 시스템 방송을 전송합니다. 수신하기 전에 앱에 대한 방송 수신기를 등록해야 합니다! 등록 방법은 동적과 정적의 두 가지 유형으로 나뉩니다!

2.png

3.png

아래에서는 코드를 통해 둘의 사용법과 차이점을 보여줍니다.

2) 동적 등록 인스턴스(네트워크 상태 변경 모니터링)

코드 예:

렌더링:

4.gif

알겠습니다. 처음에는 인터넷 연결이 없습니다. 즉, Wi-Fi가 켜지지 않습니다. 잠시 후 토스트 프롬프트가 나타납니다~ 구현하기도 쉽습니다!

코드 구현:

BroadcastReceiver를 사용자 정의하고 onReceive() 메서드에서 브로드캐스트할 트랜잭션을 완료합니다. 예를 들어 여기에 토스트 정보가 표시됩니다. MyBRReceiver.java

public class MyBRReceiver는 BroadcastReceiver를 확장합니다{
@Override
public void onReceive(Context context, Intentintent) {
Toast.makeText(context,"네트워크 상태가 변경되었습니다~",Toast.LENGTH_SHO RT).show () ;
}
}

MainActivity.java의 동적 등록 브로드캐스트:

public 클래스 MainActivity는 AppCompatActivity를 확장합니다. {

MyBRReceiver myReceiver;

@Override
protected void onCreate(Bundle selectedInstanceState) {
          super.onCreate(savedInstanceState); ㅋㅋㅋ         , 레이아웃 .activity_main);
// 코드의 핵심 부분:
mysuceiver = new mybr Career (); oid.net.conn.connectivity_change ");
RegisterReceiver , itFilter);
}

//취소하는 것을 잊지 마세요. Broadcast~
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myReceiver);
}
}


업데이트 등록은 간단하지만 ~ 동적 등록의 단점은 프로그램을 방송을 받기 전에 시작되었습니다. 시작되지 않았지만 여전히 방송을 수신할 수 있는 경우에는 정적 방송을 등록해야 합니다!

3) 정적 등록 인스턴스(부트 브로드캐스트 수신)


코드 예:

여기에는 회로도가 없습니다~, 코드 구현을 보세요~

코드 구현:

1 . BroadcastReceiver를 자체 정의하고 onReceive를 재정의하여 트랜잭션 처리를 완료합니다.

public class BootCompleteReceiver는 BroadcastReceiver를 확장합니다. {

private final String ACTION_BOOT = "android.intent.action.BOOT_COMPLETED";
@Override
public void onReceive(컨텍스트 컨텍스트, 인텐트 의도) {
if (ACTION_BOOT.equals(intent.getAction()))
Toast.makeText(context, "부팅 완료~", Toast.LENGTH_LONG).show();
}
}

2. AndroidManifest.xml에 BroadcastReceiver를 등록하고 부팅 브로드캐스트를 위한 인텐트 필터를 추가하세요!

android.permission.RECEIVE_BOOT_COMPLETED 권한을 추가하는 것을 잊지 마세요!

<receiver android:name=".BootCompleteReceiver">
<intent-filter>
-filter> ;
</receiver>

<!-- 권한 -->
<사용 -permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

알겠습니다. 그러면 휴대폰을 다시 시작하면 잠시 후 시작 완료 토스트가 뜹니다~ 또한 Android 버전 4.3 이상에서는 프로그램이 SD에 설치된 경우 SD 카드에 프로그램을 설치할 수 있습니다. , 부트 브로드캐스트를 수신할 수 없습니다. 구체적인 이유와 해결 방법은 다음 섹션에서 자세히 설명하겠습니다!


4) 브로드캐스팅 사용 시 주의 사항:

야 브로드캐스팅은 사용하기 쉽고 간단하지만 브로드캐스팅 사용에 주의해야 합니다.

브로드캐스팅에서 너무 많은 로직을 추가하거나 시간이 많이 걸리는 작업을 수행하지 마세요. , 브로드캐스트할 때 스레드를 열 수 없기 때문입니다. onReceiver() 메서드가 오랜 시간(10초 이상) 동안 실행되고 종료되지 않으면 프로그램에서 오류(ANR)를 보고합니다. 브로드캐스팅은 서비스 시작, 알림 프롬프트, 활동 등등!


4. 방송 보내기

뭐, 무엇보다도 우리는 시스템에서 방송을 받습니다. 항상 수동적으로만 할 수는 없잖아요. 게다가 내일은 중국 밸런타인데이인데 프로그래머 여러분, 이를 활용하여 싱글에서 벗어나도록 노력해보세요, 하하! 좋아요, 방송으로 돌아가서 우리가 주도적으로 방송하겠습니다! 달성 방법을 살펴보겠습니다!

보내는 방법 : 방송을 보내기 전에 먼저 수신자를 정의하고 대상을 먼저 결정한 다음 고백해야합니다! TION_BOOT = "com.example.broadcasttest.MY_BROADCAST";

@Override

public void onReceive(Context context, Intentintent) {5.png if(ACTION_BOOT.equals(intent.getAction()))

Toast.makeText(context, " 고백을 받았습니다~",Toast .LENGTH_SHORT).show();

}}

그런 다음 AndroidManifest.xml에 등록하고 Intent-filter:

<receiver android:name=".MyBroadcastReceiver라고 작성합니다. ">
<intent-filter>
; <action android:name="com.example.broadcasttest.MY_BROADCAST"/>
</intent-filter>
</receiver>

좋아요, 다음으로 위의 프로그램 프로젝트를 실행한 다음 닫고 새 프로젝트를 만듭니다. 이 프로젝트에서 브로드캐스트를 완료하세요 ~ 새 Demo2를 만들고 레이아웃은 간단한 버튼으로 만든 다음 MainActivity에서 브로드캐스트를 완료하세요.

MainActivity.java:

public class MainActivity는 AppCompatActivity를 확장합니다. {
@Override
protected void onCreate( Bundle SavedinStancestate) {
Super.Oncreate(Savedinstancestate);
SetContentView(R.Layout.activity_main);
Button BTN_SEND = (버튼) FindViewByid( R.id.btn_send)
Public Void Onclick(View v ) {
Sendbroadcast (New Intent ("Com.example.BroadCasttest.my_broadcast"); , 실행 중인 스크린샷 찍기:





이 섹션 요약:

좋아요, 간단한 사용법은 다음과 같습니다. BroadcastReceiver는 그렇게 간단하지만 여기서 사용하는 것은 글로벌 브로드캐스트, 즉 다른 애플리케이션은 방송을 수신할 수도 있으며 이로 인해 일부 보안 문제가 발생할 수 있지만 다음 섹션에서 사용 방법을 알려드리겠습니다. 로컬 방송, 안드로이드 4.3 이후 SD 카드에 애플리케이션 설치 방법, 시작 모니터링 방법~자, 여기까지입니다. 감사합니다~

6.gif