四大组件之BroadcastReceiver

BroadcastReceiver

一 定义:当一个事件发生的时候,就会发送一个广播,所有注册了这个广播的接收者都可以接收这个广播,也就是说一个广播可以被多个接收者接收
二 广播的接收
    1清单文件中注册(永久注册,除非卸载)     
public class Receiver extends BroadcastReceiver {
	@Override
	public void onReceive(Context context, Intent intent) {
		// TODO Auto-generated method stub
		Bundle bundle=intent.getExtras();
	}

}
<receiver android:name="com.example.receiver.Receiver">
            <intent-filter android:priority="1000">
                <action android:name="android.intent.action.ACTION_SHUTDOWN"/>
            </intent-filter>
        </receiver>
    2代码注册临时的广播接收者
      在activity启动时注册广播接收者(onCreate()),在activity退出时注销广播接收者(onDestroy())  
@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		receiver = new Receiver();
		IntentFilter filter=new IntentFilter("com.broadcast.ORDER");
		filter.setPriority(1000);
		registerReceiver(receiver, filter);
	}
	
	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		unregisterReceiver(receiver);
	}
发送广播
     a 普通广播:接受者之间不能中断(absort),不能互传数据(result)      
     Intent intent=new Intent("com.broadcast.NORMAL");
     sendBroadcast(intent,null);
     b 有序广播:接收者之间可以中断,可以传递数据
         接收有序广播时,先发布的先接收,优先级大的先接收
     Intent intent=new Intent("com.broadcast.ORDER");
     intent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);//包含从未启动过的程序(3.1以后默认不包含),也可以不写
     sendOrderedBroadcast(intent,null);//不指定权限,赋值为null
发送广播时传递数据
      a  intent传递数据,该数据不可被修改(需要重新发布)
         向intent中添加数据
      intent.putExtra("data","添加数据");

         获取各自对应的数据      

      intent.getStringExtra("data");
      b  ResultAPI传递数据,有序广播可以使用ResultAPI传递数据         
      Bundle bundle=new Bundle();
      bundle.putString("name","张三");
      bundle.putInt("age",21);
      sendOrderedBroadcast(intent,null,null,null,1,"MainActivity",bundle);
          获取各自的数据       
      int code=getResultCode();//结果数据中的int型参数
      String data=getResultData();//结果数据中String型参数
      Bundle bundle=getResultExtras(true);     //结果数据中的bundle,若之前的操作结果数据bundle改为null,表示前面没有bundle集合true就会返回一个new Bundle(),创建一个集合,false的话则返回null,因为之前就没有bundle集合
          修改结果数据
          在有序广播中,接收者是将数据一个给一个传递的,是个链式结构,后面的接收者可以接收前面修改后的数         
      bundle.putString("name","王族");
      bundle.putInt("age",25);
      setResult(6,"Paris",bundle);//修改Result数据,后面的接收者将收到这个修改后的数据
五  中断广播(有序广播中可操作)
     abortBroadcast()可中断广播,后面就不会收到广播,sendOrderedBroadcast()中若第三个参数赋值ResultReceiver,      还是会收到广播,始终都是最后一个接收到
六  广播权限
      a  发送端要求接收端的权限(要求接收者必须有权限)
  接收端必须持有发送端的权限才可以接收这个广播
  <permission/>声明权限---在发送端声明这个权限
  <uses-permission/>使用权限---在接收端使用这个权限才可以收到广播
      b  接收端要求发送端的权限
  在<receiver/>标签中指定android:permission=""权限,发送端必须有这个权限,接收端才会接收它的广播;若无权               限,接收端不接收广播
七  生命周期
      从收到广播的时候生命周期开始,到执行onReceive()方法执行结束,生命周期结束,进程中如果没有其他组件,容易被       杀死
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值