Android学習のBroadcast

8182 ワード

AndroidでActivity,Service,Broadcast,BroadcastReceiverを使う
アクティビティ(Activity)-機能の表現に使用
サービス(Service)-バックグラウンドで実行されるActivityに相当
ブロードキャスト(Broadcast)-ブロードキャストの送信に使用
ブロードキャスト受信機(BroadcastReceiver)-ブロードキャストを受信する
Intent-上記の各コンポーネントを接続し、メッセージを転送するために使用します.
 
Androidの放送イベントは2種類ありますが、1つはシステム放送イベント、例えばACTION_BOOT_COMPLETED(システム起動完了後トリガー)、ACTION_TIME_CHANGED(システム時間変更時にトリガー)、ACTION_BATTERY_LOW(低電力時トリガ)など.もう1つは、カスタマイズされたブロードキャストイベントです.
 
 
BroadcastReceiverの登録には2つの方法があります.
1つの方法は、AndroidManifestで静的です.xmlにはラベルライフで登録し、ラベル内にラベルでフィルタを設定します.
もう1つの方法は、コードの中で1つのIntentFilterオブジェクトを動的に定義して設定し、登録が必要な場所でContextを調整することである.registerReceiver()メソッドは、キャンセルするとContextを呼び出す.unregisterReceiver()メソッド.動的に登録されたBroadcastReceiverのContextオブジェクトが破棄されると、BroadcastReceiverは自動的に登録をキャンセルします.(特に、メールメッセージなど、バックグラウンドで傍受する必要がある場合があります)
ブロードキャストイベントの送信:Context.を介してsendBroadcastが送信し,Intentが登録時に用いたActionを渡す.≪ブロードキャスト・イベントの受信|Receive Publish Events|emdw≫:送信されたブロードキャストが受信機によって傍受されると、onReceive()メソッドが呼び出され、メッセージを含むIntentオブジェクトが送信されます.onReceiveのコードの実行時間は5 sを超えないでください.そうしないと、Androidはタイムアウトdialogをポップアップします.
またsendBroadcast()を使用する方法で受信権限を指定するとAndroidManifestのみとなる.xmlでタブでこの権限を持つBroascastReceiverが送信されたBroadcastを受信する可能性があることを宣言します.同様に、BroadcastReceiver登録時に受信可能なBroadcastの権限を指定すると、パッケージ内のAndroidManifestのみとなる.xmlではタグで宣言されており、この権限を持つContextオブジェクトが送信するBroadcastはこのBroadcastReceiverによって受信されます.
ブロードキャスト受信機にはユーザインタフェースがありません.ただし、受信した情報に応答するactivityを起動したり、NotificationManagerでユーザーに通知したりすることができます.通知は、バックライトの点滅、振動、音声の再生など、多くの方法でユーザーの注意を引くことができます.
 
MainActivity.java:
 
package com.demo.broadcast;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

/**  
 * @ClassName: MainActivity  
 * @Description: Broadcast  demo
 * @author chenzheng
 * @date 2014-9-4   10:15:05  
 */
public class MainActivity extends Activity implements OnClickListener{
	private Button sendStaticBtn;
	private Button sendDynamicBtn;
	private static final String STATICACTION = "com.demo.broadcast.static";
	private static final String DYNAMICACTION = "com.demo.broadcast.dynamic";
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		sendStaticBtn = (Button) findViewById(R.id.send_static);
		sendDynamicBtn = (Button) findViewById(R.id.send_dynamic);
		sendStaticBtn.setOnClickListener(this);
		sendDynamicBtn.setOnClickListener(this);
	}
	
	@Override
	protected void onStart() {
		super.onStart();
		Log.e("MainActivity", "      ");
		//            
		IntentFilter filter_dynamic = new IntentFilter();
		filter_dynamic.addAction(DYNAMICACTION);
		registerReceiver(dynamicReceiver, filter_dynamic);
	}
	
	private BroadcastReceiver dynamicReceiver = new BroadcastReceiver() {
		
		@Override
		public void onReceive(Context context, Intent intent) {
			Log.e("MainActivity", "             ");
			if(intent.getAction().equals(DYNAMICACTION)){
				String msg = intent.getStringExtra("msg");
				Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
			}
		}
	};
	
	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.send_static:
			Log.e("MainActivity", "             ");
			Intent intent1 = new Intent();
			intent1.setAction(STATICACTION);
			intent1.putExtra("msg", "          !");
			sendBroadcast(intent1);
			break;
		case R.id.send_dynamic:
			Log.e("MainActivity", "             ");
			Intent intent2 = new Intent();
			intent2.setAction(DYNAMICACTION);
			intent2.putExtra("msg", "          !");
			sendBroadcast(intent2);
			break;
		default:
			break;
		}
	}
}

 
 
 
 
StaticReceiver.java:
 
 
 
package com.demo.broadcast;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;

/**  
 * @ClassName: StaticReceiver  
 * @Description:               
 * @author chenzheng
 * @date 2014-9-4   11:09:53  
 */
public class StaticReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		Log.e("MainActivity", "             ");
		String msg = intent.getStringExtra("msg");
		Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
	}
}

 
 
 
 
 
 
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.demo.broadcast"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="14" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!--              -->
        <receiver android:name=".StaticReceiver" >
            <intent-filter>
                <action android:name="com.demo.broadcast.static" />
            </intent-filter>
        </receiver>
        <!--             -->
        <receiver android:name=".SystemReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BATTERY_LOW" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="hello" />

    <Button
        android:id="@+id/send_static"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="           " />

    <Button
        android:id="@+id/send_dynamic"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="           " />

</LinearLayout>