BroadcastReceiver マスターテスト


このセクションの紹介

このセクションでは、Android の 4 つの主要コンポーネントのうちの 3 番目である BroadcastReceiver (ブロードキャスト レシーバー) について学びます。 冒頭の文章をどう書こうかということで、手元にあった Android の基本書を 2 冊めくってみたのですが、どちらにも BroadcastReceiver の紹介が載っていませんでした。 偶然なのか、作者がこれはあまり使われていないので話す必要もないと感じているのかはわかりません。しかし、彼らはそれについて話しませんが、Xiaozhuはそれについて話すことができ、彼はそれについて詳しく話さなければなりません! さて、このセクションを始めましょう~ PS: ちなみに、Android 公式 Web サイトで、[API ガイド] -> [アプリ コンポーネント] をクリックしましたが、BroadcastReceiver の痕跡は見つかりませんでした。 それでは、BroadcastReceiver を検索してください。対応するドキュメントのアドレスは BroadcastReceiver


1 です。

答え: Broadcast は文字通りブロードキャストと訳されます。BroadcastReceiver を理解するために、前に勉強してください。 当時、各クラスには大きなスピーカーが壁に吊り下げられており、学校で本の移動が始まると次のようなアナウンスが放送されていました。 「各クラスで数人のクラスメートを見つけて、教務室に本を取りに来てください。このブロードキャストが送信された後、すべての学生が同時にこのブロードキャストの通知を受け取ります。」 受け取りましたが、すべての生徒が本を移動するわけではありません。通常、本を移動するのはクラスの「強者」です。このグループの「強者」はこれを受け取りました。 放送終了後、本の移動に出発するが!

——上記はブロードキャスト配信の非常に鮮明な例です:
大きなスピーカー--> ブロードキャストを送信--> すべての生徒がブロードキャストを受信できます--> ヘラクレスがブロードキャストを処理します
私たちのコンセプトは、ブロードキャストレシーバーです。実際にはアプリケーション間のグローバルスピーカー、つまり通信手段です。 システム自体は、バッテリー残量が少ないときやバッテリーが十分にあるとき、起動直後、ヘッドフォンを接続したとき、入力方式を変更したときなど、何度もブロードキャストを送信します。 このような時間が発生すると、システムはブロードキャストを送信し、アプリケーションがそれを受信するようにします。 このブロードキャスト中にいくつかの操作を実行します。たとえば、システムの電源を入れた後、バックグラウンドでサービスを密かに実行します ~ (笑)、この時点で必要なのは次のことだけです。 起動監視用のBroadcastReceiverを登録して、起動ブロードキャストを受信したらちょっと卑劣なことをしてみます~。 もちろん、自分自身でブロードキャストを送信することもできます。たとえば、サーバーからプッシュ情報を受信した後、ユーザーは別の場所にログインし、その後ユーザーは強制的にログオフして元に戻る必要があります。 ログイン インターフェイスと、他の場所にログインするよう求めるプロンプト ~ もちろん、ブロードキャストがもたらす利点を誰もが理解できるように、後で簡単な例を書きます ~


2. 2 種類のブロードキャスト:

1.png


3. システム ブロードキャストを受信する

1) ブロードキャストを登録する 2 つの方法

前述のように、システムは特定の時間に対応するシステム ブロードキャストを送信します。 受信する前に、アプリにブロードキャスト受信機を登録する必要があります。登録方法は動的と静的の2種類に分かれます!

2.png

3.png

以下では、コードを通じて 2 つの使用法と違いを示します:

2) 動的登録インスタンス (ネットワーク状態の変化の監視)

コード例:

レンダリング :

4.gif

OK、最初はインターネット接続がありません。つまり、Wi-Fi がオンになっていません。しばらくすると、トースト プロンプトが表示されます。 実装も簡単です!

コードの実装:

BroadcastReceiver をカスタマイズし、onReceive() メソッドでブロードキャストされるトランザクションを完了します (プロンプト トースト情報など)。 MyBRReceiver.java

public class MyBRReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent Intent) {
Toast.makeText(context,"ネットワークの状態が変わりました~",Toast.LENGTH_SHO RT).show () ;
}
}

MainActivity.javaの動的登録ブロードキャスト:

public class MainActivity extends AppCompatActivity {

MyBRReceiver myReceiver;

@Override
protected void onCreate(Bundle SavedInstanceState) {
super.onCre ate(savedInstanceState);
activity_main);
// コードのコア部分:
mysuceiver = new mybrcareer (); oid.net.conn.connectivity_change ");
registerReceiver , itFilter);
}

// ブロードキャストをキャンセルすることを忘れないでください~
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myReceiver);
}
}

アップデート 登録は簡単です ~ しかし、動的登録の欠点の 1 つは、プログラムを開始する必要があることです。番組が必要な場合は、放送を受信する前に。 開始されていないがブロードキャストを受信できる場合は、静的ブロードキャストを登録する必要があります。

3) 静的登録インスタンス (ブートブロードキャストの受信)

コード例:

ここには回路図はありません~、コード実装を見てください~

コード実装:

1 . BroadcastReceiver を自己定義し、onReceive をオーバーライドしてトランザクション処理を完了します

public class BootCompleteReceiver extends BroadcastReceiver {
private Final String ACTION_BOOT = "android.intent.action.BOOT_COMPLETED";
@Override
public void onReceive(Context context, Intent意図) {
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. ブロードキャストを送信する

さて、私たち全員がシステムからブロードキャストを受信します。私たちは常に受動的であることはできません。 また、明日はチャイニーズバレンタインデーです、プログラマの皆さん、これを利用して独身から抜け出してください(笑)!さて、放送の話に戻りますが、私たちが率先して放送していきます! それを達成する方法を見てみましょう!

送信方法: ブロードキャストを送信する前に、まず受信者を定義し、ターゲットを決定してから告白する必要があります。 About TION_BOOT = "com.example.broadcasttest.MY_BROADCAST";

@Override

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

Toast.makeText(context, "告白受けました~",Toast .LENGTH_SHORT).show();

}}

そしてAndroidManifest.xmlに登録してIntent-filter:

<receiver android:name=".MyBroadcastReceiver ">
< インテント フィルター>
; <アクション android:name="com.example.broadcasttest.MY_BROADCAST"/>
</インテント フィルター>
</receiver>

それでは、次に上記のプログラム プロジェクトを実行して閉じ、新しいプロジェクトを作成します。 このプロジェクトでブロードキャストを完了します ~ 新しい Demo2 を作成し、レイアウトはシンプルなボタンで、MainActivity でブロードキャストを完了します:

MainActivity.java:

public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(バンドルsavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
" btn_send.setOnClickListener(new View.OnClickListener() { I@Override
Public Void Onclick (View v) {
Sendbroadcast (New Intent ("Com.example.BroadCasttest.My_broadcast");
}}} 、実行中のスクリーンショットを見てください:




このセクションの概要:

わかりました、簡単ですBroadcastReceiver の使用は非常に簡単ですが、ここで使用するのはグローバル ブロードキャスト、つまりその他のブロードキャストです。 アプリケーションはブロードキャストを受信することもできるため、セキュリティ上の問題が発生する可能性がありますが、次のセクションでその使用方法を説明します。 ローカルブロードキャスト、Android 4.3以降のSDカードにアプリケーションをインストールする方法、起動を監視する方法~はい、このセクションは以上です、ありがとうございます~6.gif