它是用来接收来自系统的和应用中的广播
如开机产生广播,网络发生广播, 如电池电量发生改变
广播的类型:
1:Normal broadcasts 默认广播
发送一个默认的广播 context.sendBradcast()方法,普通广播对于多个接收者来说完全异步的,
通常每个接收者都无需等待即可以接收广播,接收者互相之间不会有影响。对于这种广播,即无法终止广播
,即无法阻止其他接收者接收的动作
2:Order broadcasts 有序广播
使用:context.sendOrderBradcast() 有序广播比较特殊,它每次只发送到优先级较高的接收者那里
然后由高到低,高的可以阻止低的 短信拦截
在注册广播的时候可以使用优先级android:priority属性 这个属性的范围在 -1000到1000,
数值越大优先级越高
obortBradcast();停止传递
3:Sticky broadcasts 粘性广播 就是没开 虽然我播完 了 你也可以收到
当处理完intent之后,依然存在,直到你把它去掉
静态注册:xml文件
动态注册:代码中 代码注册会先接收到广播
启动一个普通的广播示例(启动按钮发送一个普通的广播):
//发送一个普通的广播
public void sendBroad(View v){
//intent里面定义“com.qq” 是中介,
Intent intent=new Intent("com.qq.music");
intent.putExtra("info", "接收中。。。");
this.sendBroadcast(intent);
}
新建一个广播接收者extends BroadcastReceiver 它里面intent也可以传递参数
public class MyBroadCast extends BroadcastReceiver{
//接收
@Override
public void onReceive(Context arg0, Intent intent) {
// TODO Auto-generated method stub
String st = intent.getStringExtra("info");
Toast.makeText(arg0, st, 1).show();
}
}
在xml文件中注册广播(静态注册)
<receiver
android:name="com.example.day0706mybroadcasereceiver.MyBroadCast"
android:enabled="true"
android:exported="true"
>
<!-- 和接收者action一致 -->
<intent-filter >
<action android:name="com.qq.music"/>
</intent-filter>
</receiver>
还有一种注册方式是通过代码动态注册(代码注册会优先比静态注册接收到广播) 启动就注册动态广播
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
//在该方法中进行广播注册
//动态注册
IntentFilter filter=new IntentFilter();
filter.addAction("com.qq");
registerReceiver(myBroadCast2, filter);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
//再该方法中解除注册
unregisterReceiver(myBroadCast2);
}
//和上面一样发送个广播
public void sendBroad(View v){
//intent里面定义中介
Intent intent=new Intent("com.qq");
intent.putExtra("info", "接收中。。。");
this.sendBroadcast(intent);
}