BroadcastReceiver--Android廣播機制,android廣播機制
什麼是廣播
生活中的電視頻道、收音機、手機、都有自己的特定廣播,他們不管是否有人關心、收聽等,不管你是否看電視,每個頻道都實施按照自己的進步進行播放、收音機也是!所以我理解的android廣播機制也就是這樣--廣播發行者只負責把發生的事件發出,至於是否有接聽者或者接聽者接收到怎樣處理並不關心。
廣播在android中的用途 從上面的介紹不難發現,用來傳輸資料。具體如下:
怎樣實現廣播
現在我們就來實現一個簡單的廣播程式。Android提供了兩種註冊廣播接受者的形式,分別是在程式中動態註冊和在xml中指定。他們之間的區別就是作用的範圍不同,程式動態註冊的接收者只在程式運行過程中有效,而在xml註冊的接收者不管你的程式有沒有啟動有會起作用。首先介紹在程式中動態註冊的方式。
Android有系統廣播也可以自訂廣播,要想接受廣播資訊,那麼這個廣播接收器就得我們自己來實現了,我們可以繼承BroadcastReceiver,就可以有一個廣播接受器了。有個接受器還不夠,我們還得重寫BroadcastReceiver裡面的onReceiver方法,當來廣播的時候我們要幹什麼,下面一個小程式來進行展示廣播的應用。
一、註冊(當實現了廣播接收器,還要設定廣播接收器接收廣播資訊的類型,這裡是資訊:android.provider.Telephony.SMS_RECEIVED)
在AndroidManifest.xml中配置廣播
二、繼承BroadcastReceiver,重寫onReceiver方法。這裡是監聽到簡訊發送,將觸發這個廣播,然後把簡訊內容解析出來並展示:
public class SmsBroadCastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); Object[] object = (Object[])bundle.get("pdus"); SmsMessage sms[]=new SmsMessage[object.length]; for(int i=0;i<object.length;i++) { sms[0] = SmsMessage.createFromPdu((byte[])object[i]); Toast.makeText(context, "來自"+sms[i].getDisplayOriginatingAddress()+" 的訊息是:"+sms[i].getDisplayMessageBody(), Toast.LENGTH_SHORT).show(); } //終止廣播,在這裡我們可以稍微處理,根據使用者輸入的號碼可以實現簡訊防火牆。 abortBroadcast(); } }
android開發廣播機制一般什情況會用到 詳細分析與解釋
Android中最典型的廣播器是電話來電和簡訊通知。
你做音樂播放器的話根本不需要廣播 進度條拖動是監聽seekbar的拖動事件
//綁定聲音進度條監聽器 soundBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Override public void onStopTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } @Override public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // TODO Auto-generated method stub //處理你的事件 } });
android的BroadcastReceiver的問題
public class TestActivity extends Activity {
/** Called when the activity is first created. */
private Button bt1 = null;
private Button bt2 = null;
private static String filter_ACTION = "android.provider.Telephony.SMS_RECEIVED";
SMSReceiver smsReceiver = null;
public String tag = "TestActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
registerReceiver();
setContentView(R.layout.main);
bt1 = (Button) findViewById(R.id.button);
bt1.setOnClickListener(new RegisterBroadReceiver());
bt2 = (Button) findViewById(R.id.button1);
bt2.setOnClickListener(new unRegisterBroadReceiver());
}
private void registerReceiver() {
IntentFilter filter = new IntentFilter();
filter.addAction(filter_ACTION);
smsReceiver = new SMSReceiver();
TestActivity.this.registerReceiver(smsReceiver, filter);
}
class SMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Log.d(tag, "SMSReceiver");
Toast.makeText(TestActivity.this, "新簡訊"+intent.getStringExtra("yaner"), Toast.LENGTH_LONG).show();
}
}
class RegisterBroadReceiver implements OnClickListener {
@Override
public void onClick(View v) {
Log.d(tag, "RegisterBroadReceiver");
Intent mIntent = new Intent(filter_ACTION);
mIntent.putE......餘下全文>>