[セットトップ]Androidの四大コンポーネントのBroadcastReceiver
3770 ワード
Androidの四大コンポーネントのBroadcastReceiver
Broadcast Receiverブロードキャスト受信機は、ブロードキャストメッセージを受信し、メッセージに応答するためのコンポーネントであり、Serviceと同様にユーザと対話するUIインターフェースを提供しない。イベント処理の仕組みと似ていますが、イベント処理の仕組みはプログラムのコンポーネントレベルです。放送イベントはシステムレベルです。
システムのソースコード:fram eweorks/base/core/java/android.com nt.BroadcastReceiver.java
1)BroadcastReceiverライフサイクル
BroadcastReceiverオブジェクトはオンリードライブ()の呼び出し時にのみ有効であり、この方法の呼び出しが完了すると、システムはこのオブジェクトを破壊します。次回放送を受けると、再度newはBroadcastReceiverオブジェクトを生成します。OneReceive()メソッドが約10秒以内に実行されていない場合、システムはこのプログラムが応答しないと考えていますので、OneReceive()の方法で時間のかかる作業をする必要があれば、他のActivityやServiceにIntetを送ることで完成できます。2)Android標準の放送ACTION
3)放送を出す
アプリケーションでカスタマイズした放送イベントを作成できます。放送の内容と放送をフィルタリングするアクションは、Intentオブジェクトを介して送信されます。
Conteextでは、システムは3つのブロードキャストを送信する方法を提供する。
(1)Conttext.sendBroadcast()条件を満たすすべてのBroadcastReceiverはそのonReceive()を実行します。
(2)Conttext.sendStickyBroadcast()送信されたIntentはずっと存在しています。そして今後システムに登録されたBroadcastReceiverがこのアクションを満足させるとすぐにこの放送を受信します。
(3)Conttext.sendOrderedBroadcast()送信された放送は、BroadcastReceiver登録時にIntent Filterが設定した優先度の属性に基づいて、そのonReceive()方法を実行し、同じ優先度のBroadcastReceiverがone Receive()方法を実行する順序は不確定です。
4)Broadcast Receiverの登録
アプリケーションであるブロードキャスト(Androidシステム内蔵のブロードキャストまたは私たち自身が定義したブロードキャスト)を受信し、受信したブロードキャストを処理するためには、BroadcastReceiverクラスを作成し、そのオンリービュー()方法でブロードキャストを処理する必要があります。同時に私達はまた私達のBroadcastReceiverを登録する必要があります。BroadcastReceiverを登録する方法は2つあります。(1)Android dManifest.xmlファイルにAndroid Manifest.xmlに登録されている放送は常駐型放送です。アプリケーションが閉じていても、放送が受信できます。まず、我々はクラスを作成し、BroadcastReceiverから引き継ぎ、そのonReceiveを実現する必要があります。
Android Manifest.xmlに登録します。
(2)アプリケーションのコードに登録されたRegisterReceiver()メソッドを使って動的に登録されたブロードキャストは、アプリケーションが終了すると、BroadcastReceiverを呼び出しました。この方法は比較的柔軟です。Activityでは、私たちはワンストップ方式でRegisterReceiver()を呼び出してBroadcastReceiverを登録してから、ワンストップ()方法でunregisterReceiver()を呼び出して登録します。
Broadcast Receiverブロードキャスト受信機は、ブロードキャストメッセージを受信し、メッセージに応答するためのコンポーネントであり、Serviceと同様にユーザと対話するUIインターフェースを提供しない。イベント処理の仕組みと似ていますが、イベント処理の仕組みはプログラムのコンポーネントレベルです。放送イベントはシステムレベルです。
システムのソースコード:fram eweorks/base/core/java/android.com nt.BroadcastReceiver.java
1)BroadcastReceiverライフサイクル
BroadcastReceiverオブジェクトはオンリードライブ()の呼び出し時にのみ有効であり、この方法の呼び出しが完了すると、システムはこのオブジェクトを破壊します。次回放送を受けると、再度newはBroadcastReceiverオブジェクトを生成します。OneReceive()メソッドが約10秒以内に実行されていない場合、システムはこのプログラムが応答しないと考えていますので、OneReceive()の方法で時間のかかる作業をする必要があれば、他のActivityやServiceにIntetを送ることで完成できます。2)Android標準の放送ACTION
ACTION_TIME_TICK
ACTION_TIME_CHANGED
ACTION_TIMEZONE_CHANGED
ACTION_BOOT_COMPLETED
ACTION_PACKAGE_ADDED apk
ACTION_PACKAGE_CHANGED apk
ACTION_PACKAGE_REMOVED
ACTION_PACKAGE_RESTARTED
ACTION_PACKAGE_DATA_CLEARED
ACTION_UID_REMOVED
ACTION_BATTERY_CHANGED
ACTION_POWER_CONNECTED
ACTION_POWER_DISCONNECTED
ACTION_SHUTDOWN
ACTION_CAMERA_BUTTON
ACTION_MEDIA_MOUNTED
3)放送を出す
アプリケーションでカスタマイズした放送イベントを作成できます。放送の内容と放送をフィルタリングするアクションは、Intentオブジェクトを介して送信されます。
{
protected static final String MY_ACTION="com.example.myBroadcast.ACTION"
Intent intent = new Intent();
intent.setAction(MY_ACTION);
intent.putExtra("msg", "This is my a broadcast message");
sendBroadCast(intent);
}
上記のコードの中に、私達はsetActionを通じてIntentオブジェクトにフィルタ放送の動作を加えました。この動作は私達がカスタマイズしたもので、Androidに内蔵されているラジオ動作のように、この動作は私達がカスタマイズした放送を唯一識別するために使用できます。Conteextでは、システムは3つのブロードキャストを送信する方法を提供する。
(1)Conttext.sendBroadcast()条件を満たすすべてのBroadcastReceiverはそのonReceive()を実行します。
(2)Conttext.sendStickyBroadcast()送信されたIntentはずっと存在しています。そして今後システムに登録されたBroadcastReceiverがこのアクションを満足させるとすぐにこの放送を受信します。
(3)Conttext.sendOrderedBroadcast()送信された放送は、BroadcastReceiver登録時にIntent Filterが設定した優先度の属性に基づいて、そのonReceive()方法を実行し、同じ優先度のBroadcastReceiverがone Receive()方法を実行する順序は不確定です。
4)Broadcast Receiverの登録
アプリケーションであるブロードキャスト(Androidシステム内蔵のブロードキャストまたは私たち自身が定義したブロードキャスト)を受信し、受信したブロードキャストを処理するためには、BroadcastReceiverクラスを作成し、そのオンリービュー()方法でブロードキャストを処理する必要があります。同時に私達はまた私達のBroadcastReceiverを登録する必要があります。BroadcastReceiverを登録する方法は2つあります。(1)Android dManifest.xmlファイルにAndroid Manifest.xmlに登録されている放送は常駐型放送です。アプリケーションが閉じていても、放送が受信できます。まず、我々はクラスを作成し、BroadcastReceiverから引き継ぎ、そのonReceiveを実現する必要があります。
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String msg = intent.getStringExtra("msg");
Toast.makeText(context, " :"+msg, Toast.LENGTH_LONG).show();
}
}
Android Manifest.xmlに登録します。
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="com.example.myBroadcast.ACTION"/>
</intent-filter>
</receiver>
(2)アプリケーションのコードに登録されたRegisterReceiver()メソッドを使って動的に登録されたブロードキャストは、アプリケーションが終了すると、BroadcastReceiverを呼び出しました。この方法は比較的柔軟です。Activityでは、私たちはワンストップ方式でRegisterReceiver()を呼び出してBroadcastReceiverを登録してから、ワンストップ()方法でunregisterReceiver()を呼び出して登録します。
MyBroadcastReceiver myReceiver = null;
protected void onResume() {
super.onResume();
if(myReceiver == null ) {
myReceiver = new MyBroadcastReceiver();
IntentFilter filter = new InterFilter();
filter.addAction(MY_ACTION);
registerReceiver(myReceiver, filter);
}
}
protected void onStop() {
if( myReceiver != null ) {
unregisterReceiver(myReceiver);
myReceiver = null;
}
super.onStop();
}