Android-broadcast-receivers
Android-放送受信機
'_Broadcast Receivers は、他のアプリケーションまたはシステム自体からのブロードキャストメッセージに単純に応答します。 これらのメッセージは、イベントまたはインテントと呼ばれることもあります。 たとえば、アプリケーションはブロードキャストを開始して、一部のデータがデバイスにダウンロードされて使用できることを他のアプリケーションに知らせることができるため、これはこの通信を傍受して適切なアクションを開始するブロードキャストレシーバーです。_
BroadcastReceiverをシステムブロードキャストインテントに対して機能させるには、次の2つの重要な手順があります-
- ブロードキャストレシーバーの作成。
- 放送受信機を登録する
カスタムインテントを実装する場合、追加のステップが1つあり、それらのインテントを作成してブロードキャストする必要があります。
ブロードキャストレシーバーの作成
ブロードキャストレシーバーは BroadcastReceiver クラスのサブクラスとして実装され、各メッセージが Intent オブジェクトパラメーターとして受信されるonReceive()メソッドをオーバーライドします。
放送受信機を登録する
アプリケーションは、_AndroidManifest.xml_ファイルにブロードキャストレシーバーを登録することにより、特定のブロードキャストインテントをリッスンします。 Androidシステムが起動プロセスを完了すると、システムによって起動されるシステム生成イベントACTION_BOOT_COMPLETEDの_MyReceiver_を登録することを検討してください。
放送受信機
これで、Androidデバイスが起動されるたびにBroadcastReceiver _MyReceiver_によってインターセプトされ、_onReceive()_内に実装されたロジックが実行されます。
Sr.No | Event Constant & Description |
---|---|
1 |
android.intent.action.BATTERY_CHANGED 充電状態、レベル、およびバッテリーに関するその他の情報を含むスティッキーブロードキャスト。 |
2 |
android.intent.action.BATTERY_LOW デバイスの低バッテリー状態を示します。 |
3 |
android.intent.action.BATTERY_OKAY バッテリーが少なくなった後、バッテリーが正常になったことを示します。 |
4 |
android.intent.action.BOOT_COMPLETED これは、システムの起動が完了した後、一度ブロードキャストされます。 |
5 |
android.intent.action.BUG_REPORT バグを報告するためのアクティビティを表示します。 |
6 |
android.intent.action.CALL データで指定された誰かに電話をかけます。 |
7 |
android.intent.action.CALL_BUTTON ユーザーが「呼び出し」ボタンを押して、ダイヤラーまたはその他の適切なUIに移動して呼び出しを行いました。 |
8 |
android.intent.action.DATE_CHANGED 日付が変更されました。 |
9 |
android.intent.action.REBOOT デバイスを再起動します。 |
カスタムインテントのブロードキャスト
アプリケーション自体でカスタムインテントを生成および送信する場合は、アクティビティクラス内で_sendBroadcast()_メソッドを使用して、それらのインテントを作成および送信する必要があります。 _sendStickyBroadcast(Intent)_メソッドを使用すると、Intentは sticky になります。つまり、送信している_Intent_は、ブロードキャストの完了後も残ります。
このインテント_com.finddevguides.CUSTOM_INTENT_も、システムで生成されたインテントを登録したのと同様の方法で登録できます。
例
この例では、_BroadcastReceiver_を作成してカスタムインテントをインターセプトする方法を説明します。 カスタムインテントに慣れたら、システム生成インテントをインターセプトするようにアプリケーションをプログラムできます。 したがって、次の手順に従って、_Hello World Example_の章で作成したAndroidアプリケーションを変更しましょう-
Step | Description |
---|---|
1 | You will use Android studio to create an Android application and name it as My Application under a package com.example.finddevguides7.myapplication as explained in the Hello World Example chapter. |
2 | Modify main activity file MainActivity.java to add broadcastIntent() method. |
3 | Create a new java file called MyReceiver.java under the package com.example.finddevguides7.myapplication to define a BroadcastReceiver. |
4 | An application can handle one or more custom and system intents without any restrictions. Every intent you want to intercept must be registered in your AndroidManifest.xml file using <receiver…/> tag |
5 | Modify the default content of res/layout/activity_main.xml file to include a button to broadcast intent. |
6 | No need to modify the string file, Android studio take care of string.xml file. |
7 | Run the application to launch Android emulator and verify the result of the changes done in the application. |
以下は、変更されたメインアクティビティファイル MainActivity.java の内容です。 このファイルには、基本的なライフサイクルメソッドのそれぞれを含めることができます。 カスタムインテントをブロードキャストする_broadcastIntent()_メソッドを追加しました。
以下は MyReceiver.java の内容です。
以下は、_AndroidManifest.xml_ファイルの変更されたコンテンツです。 ここに、サービスを含める<receiver …/>タグを追加しました。
以下は、カスタムインテントをブロードキャストするためのボタンを含む res/layout/activity_main.xml ファイルのコンテンツです。
変更したばかりの* Hello World!アプリケーションを実行してみましょう。 環境のセットアップ中に *AVD を作成したと思います。 Androidスタジオからアプリを実行するには、プロジェクトのアクティビティファイルの1つを開き、ツールバーの[画像の実行:/android/images/eclipse_run.jpg [Eclipse Run Icon]アイコンをクリックします。 Android StudioはAVDにアプリをインストールして起動し、セットアップとアプリケーションで問題がなければ、次のエミュレータウィンドウが表示されます-
次に、カスタムインテントをブロードキャストするために、 Broadcast Intent ボタンをクリックします。これにより、カスタムインテント_ "com.finddevguides.CUSTOM_INTENT" _がブロードキャストされます。これは、登録されたBroadcastReceiverによってインターセプトされます。 MyReceiverと実装されたロジックに従って、次のようにシミュレータの下部にトーストが表示されます-
他のBroadcastReceiverを実装して、システム起動、日付変更、バッテリー低下などのシステム生成インテントをインターセプトできます。