安卓廣播機制初探

BroadcastReceiver用於監聽被註冊的廣播事件。

註冊方式有兩種,一種代碼中註冊,一種在xml中定義。

 <!-- 
        	註冊一個receiver
        	com.example.org.suju.lost.MyBroadcastReceiver類繼承BroadcastReceiver
         -->
        <receiver 
            android:name="com.example.org.suju.lost.MyBroadcastReceiver"
            >
            <!-- 增加一個intent過濾類型 只有符合其中的action的類型纔會接受廣播 -->
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
            </intent-filter>
        </receiver>
聲明在AndroidManifest.xml中的廣播


在Activity中註冊一個廣播接收器。


//註冊一個自定義的廣播接收器
	br = new MMSBroadcastReceiver();
	IntentFilter filter = new IntentFilter();
	filter.addAction("android.provider.Telephony.SMS_RECEIVED");
	registerReceiver(br, filter);

取消一個廣播接收器使用Activity的unregisterReceiver方法。

unregisterReceiver(br);
br是一個intent

自定義一個廣播接收器類,當來短信時,顯示短信內容。

public class MMSBroadcastReceiver extends BroadcastReceiver{

	@Override
	public void onReceive(Context context, Intent intent) {
		Log.d("log", "send sms");
		Bundle bundle = intent.getExtras();
		/*
		 * 顯示bundle中集合數據
		 * 我的sdk顯示有兩個key
		 * 一個是pdus object[]數組
		 * 一個是fromat 3gpp解碼格式
		 */
		for (String key: bundle.keySet()) {
			Log.d("log", key);
			Log.d("log", bundle.get(key).toString());
		}
		
		SmsMessage sms;
		//bundle中有一個key爲pdus的object數組對象,裏面包含了短消息內容字節數組
		Object[] pdus = (Object[])bundle.get("pdus");
		for (Object obj: pdus) {
			sms = SmsMessage.createFromPdu((byte[])obj);
			Log.d("log", sms.getDisplayMessageBody());
		}
	}

}

發送廣播:

//新建一個Intent.ACTION_VIEW類型的intent。
	Intent intent = new Intent(Intent.ACTION_VIEW);
	intent.putExtra("name", "text");
	intent.setClass(MainActivity.this, MyBroadcastReceiver.class);
	//發送廣播,註冊了該類型的廣播接收者就會接受到。
	sendBroadcast(intent);


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章