[セットトップ]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
 
 
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();

}