BroadcastReceiver组件
BroadcastReceiver 广播接收者 必须指定要接收的广播类型。必须明确的指定action
广播:事件。
普通广播: 是异步的。会广播接收者同时接收,不能被中断
sendBroadcast()
有序广播: 是同步的。会根据广播接收的优先级进行接收,是可以中断 短信到来广播
sendOrderBroadcast()
-1000 ~ 1000
如果有序广播明确的指定了广播接收者,他是无法被中断的。
广播接收者订阅的两种方式:
1 在清单文件里面指定:
1 <receiver android:name=".SmsReceiver"> 2 <intent-filter android:priority="1000"> 3 <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 4 </intent-filter> 5 </receiver>
2 在代码里面指定
1 IntentFilter filter = new IntentFilter(); 2 filter.setPriority(1000); 3 filter.addAction("android.provider.Telephony.SMS_RECEIVED"); 4 registerReceiver(new SmsReceiver(), filter);
onReceive()方法里面是不能执行耗时的操作,这个方式如果在10s之内没有执行完毕,就anr.
自定义广播:
在MainActivity中代码如:
1 public void send(View v){ 2 String info = et_info.getText().toString(); 3 4 //发送广播 5 Intent intent = new Intent(); 6 intent.setAction("cn.itcast.action.send"); 7 intent.putExtra("info", info); 8 sendBroadcast(intent); //发出的是普通广播 9 }
写一个类继承BroadcastReceiver并且在清单文件中配置:
1 public class MyReceiver extends BroadcastReceiver { 2 @Override 3 public void onReceive(Context context, Intent intent) { 4 // TODO Auto-generated method stub 5 6 String info = intent.getStringExtra("info"); 7 Log.i("i", "info :" + info); 8 } 9 10 }
1 <receiver android:name=".MyReceiver"> 2 <intent-filter> 3 <action android:name="cn.android.action.send"/> 4 </intent-filter> 5 </receiver>