Android-放送受信機
Broadcast Receivers 他のアプリケーションまたはシステム自体からのブロードキャストメッセージに応答するだけです。これらのメッセージは、イベントまたはインテントと呼ばれることもあります。たとえば、アプリケーションはブロードキャストを開始して、一部のデータがデバイスにダウンロードされ、使用できることを他のアプリケーションに通知することもできます。したがって、これは、この通信を傍受して適切なアクションを開始するブロードキャストレシーバーです。
BroadcastReceiverをシステムのブロードキャストインテントで機能させるには、次の2つの重要な手順があります。
ブロードキャストレシーバーの作成。
放送受信機の登録
カスタムインテントを実装する場合は、追加の手順が1つあり、それらのインテントを作成してブロードキャストする必要があります。
放送受信機の作成
放送受信機は、のサブクラスとして実装されます BroadcastReceiver クラスと、各メッセージがとして受信されるonReceive()メソッドのオーバーライド Intent オブジェクトパラメータ。
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();
}
}
放送受信機の登録
アプリケーションは、AndroidManifest.xmlファイルにブロードキャストレシーバーを登録することにより、特定のブロードキャストインテントをリッスンします。私たちが登録しようとしている考えてみましょうMyReceiverをAndroidのシステムが起動プロセスを完了すると、システムによって発射されるACTION_BOOT_COMPLETEDシステム生成されたイベントのために。
放送受信機
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver android:name="MyReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED">
</action>
</intent-filter>
</receiver>
</application>
これで、Androidデバイスが起動するたびに、BroadcastReceiver MyReceiverによってインターセプトされ、onReceive()内に実装されたロジックが実行されます。
の最終的な静的フィールドとして定義されたいくつかのシステム生成イベントがあります Intentクラス。次の表に、いくつかの重要なシステムイベントを示します。
シニア番号 | イベント定数と説明 |
---|---|
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)メソッドを使用する場合、インテントはsticky、つまり、送信するインテントは、ブロードキャストが完了した後も残ります。
public void broadcastIntent(View view) {
Intent intent = new Intent();
intent.setAction("com.tutorialspoint.CUSTOM_INTENT");
sendBroadcast(intent);
}
このインテントcom.tutorialspoint.CUSTOM_INTENTは、システムで生成されたインテントを登録したのと同様の方法で登録することもできます。
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver android:name="MyReceiver">
<intent-filter>
<action android:name="com.tutorialspoint.CUSTOM_INTENT">
</action>
</intent-filter>
</receiver>
</application>
例
この例では、カスタムインテントをインターセプトするBroadcastReceiverを作成する方法を説明します。カスタムインテントに慣れたら、システムで生成されたインテントをインターセプトするようにアプリケーションをプログラムできます。それでは、次の手順に従って、HelloWorldの例の章で作成したAndroidアプリケーションを変更しましょう。
ステップ | 説明 |
---|---|
1 | あなたは、Androidアプリケーションを作成して、それに名前を付けるためにAndroidのスタジオを使用する私のアプリケーションパッケージの下com.example.tutorialspoint7.myapplicationで説明したようにHello Worldの例の章を参照してください。 |
2 | メインアクティビティファイルMainActivity.javaを変更して、broadcastIntent()メソッドを追加します。 |
3 | パッケージcom.example.tutorialspoint7.myapplicationの下にMyReceiver.javaという新しいJavaファイルを作成して、BroadcastReceiverを定義します。 |
4 | アプリケーションは、制限なしに1つ以上のカスタムおよびシステムインテントを処理できます。傍受するすべてのインテントは、<receiver ... />タグを使用してAndroidManifest.xmlファイルに登録する必要があります |
5 | res / layout / activity_main.xmlファイルのデフォルトの内容を変更して、インテントをブロードキャストするためのボタンを含めます。 |
6 | 文字列ファイルを変更する必要はありません。AndroidStudioがstring.xmlファイルを処理します。 |
7 | アプリケーションを実行してAndroidエミュレーターを起動し、アプリケーションで行われた変更の結果を確認します。 |
変更されたメインアクティビティファイルの内容は次のとおりです MainActivity.java。このファイルには、基本的なライフサイクルメソッドのそれぞれを含めることができます。カスタムインテントをブロードキャストするためにbroadcastIntent()メソッドを追加しました。
package com.example.tutorialspoint7.myapplication;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// broadcast a custom intent.
public void broadcastIntent(View view){
Intent intent = new Intent();
intent.setAction("com.tutorialspoint.CUSTOM_INTENT"); sendBroadcast(intent);
}
}
以下はの内容です MyReceiver.java:
package com.example.tutorialspoint7.myapplication;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
/**
* Created by TutorialsPoint7 on 8/23/2016.
*/
public class MyReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();
}
}
以下は、AndroidManifest.xmlファイルの変更されたコンテンツです。ここに、サービスを含めるために<receiver ... />タグを追加しました。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.tutorialspoint7.myapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="MyReceiver">
<intent-filter>
<action android:name="com.tutorialspoint.CUSTOM_INTENT">
</action>
</intent-filter>
</receiver>
</application>
</manifest>
以下の内容になります res/layout/activity_main.xml カスタムインテントをブロードキャストするためのボタンを含めるファイル-
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Example of Broadcast"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textSize="30dp" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tutorials point "
android:textColor="#ff87ff09"
android:textSize="30dp"
android:layout_above="@+id/imageButton"
android:layout_centerHorizontal="true"
android:layout_marginBottom="40dp" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton"
android:src="@drawable/abc"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button2"
android:text="Broadcast Intent"
android:onClick="broadcastIntent"
android:layout_below="@+id/imageButton"
android:layout_centerHorizontal="true" />
</RelativeLayout>
変更したものを実行してみましょう Hello World!変更したばかりのアプリケーション。私はあなたがあなたを作成したと思いますAVD環境のセットアップを行っている間。Android Studioからアプリを実行するには、プロジェクトのアクティビティファイルの1つを開き
カスタムインテントをブロードキャストするには、をクリックしてみましょう。 Broadcast Intentボタンをクリックすると、カスタムインテント「com.tutorialspoint.CUSTOM_INTENT」がブロードキャストされます。これは、登録済みのBroadcastReceiver、つまりMyReceiverによってインターセプトされ、実装されたロジックに従って、次のようにシミュレーターの下部にトーストが表示されます。
他のBroadcastReceiverを実装して、システムの起動、日付の変更、バッテリーの低下など、システムで生成されたインテントを傍受することができます。