您的位置:首页 > 移动开发 > Android开发

Android 四大组件之BroadcastReceiver 广播

2016-07-10 11:05 471 查看
参考大神的理解 :http://www.cnblogs.com/lwbqqyumidi/p/4168017.html  

广播 BroadcastReceiver 用于接收程序所发出的Broadcast Intent, 也可以说他是一个全局监听器 监听所有程序的广播消息。

广播分为  有序广播   NormalBroadcast 普通广播   

优点 效率高,但是接收者不能讲结果传递给下一个接受者 无法终止

      OrderedBroadcast 有序广播  

优点 可以将数据接着传递给下一个接收者 ,下一个接收者 不仅可以得到广播的数据 还能得到上一个接受者存入的数据  Bundle bundle=getResultExtras(true)可以得到上一个接受者存入的数据;可以设置优先级  让谁先得到广播的消息 

但是  如果 前一个接受者停止了广播  下一个接受者就收不到了 调用abortBroadcast()终止广播

     System Broadcast: 系统广播

Android系统中内置了多个系统广播,只要涉及到手机的基本操作,基本上都会发出相应的系统广播。如:开启启动,网络状态改变,拍照,屏幕关闭与开启,点亮不足等等。每个系统广播都具有特定的intent-filter,其中主要包括具体的action,系统广播发出后,将被相应的BroadcastReceiver接收。系统广播在系统内部当特定事件发生时,有系统自动发出。
简单的广播实现  

  广播 注册方式有两种 写法     其一: 静态广播    

1:先创建一个类继承抽象类 BroadcastReceiver  并实现抽象方法OnReceive

其中 同过 参数 intent 可以得到发来的广播 通俗的讲就是得到传来的值

public class MyBroadcastreceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String str=intent.getStringExtra("jing");
Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
Log.d("MyBroadcastreceiver", str);
}
}


2:静态广播 需要在配置清单中 配置 

注意 receiver的名字 是包名加类名   action 的名字 可以随意写 但要与Intent设置的一致

<receiver android:name=".broadcastreceivers.MyBroadcastreceiver">
<intent-filter>
<action android:name="jingtai"></action>
</intent-filter>
</receiver>

3:发广播  

Intent intent=new Intent();
intent.putExtra("jing","hellow! jingtaiBroadcastreceiver");
intent.setAction("jingtai");
sendBroadcast(intent);

 以上就是简单的 静态广播了   

其二:动态广播

1i: 这里 需要用到 IntetnFilter 

设置action 名称  需要与 Intent设置的一致    同样需要写个类 继承 BroadcastReceiver  

然后实现抽象方法 OnReceive   创建一个实例化对象   注册广播  

IntentFilter intentFilter=new IntentFilter();
intentFilter.addAction("dt");

my = new MyBroadcastreceiver();
registerReceiver(my,intentFilter);


2:Intent 设置   主要 action要与 IntentFilter  设置的一致

Intent intenet=new Intent();
intenet.putExtra("dongtai","heloow!我是动态广播哦");
intenet.setAction("dt");
sendBroadcast(intenet);

3:取值  同样  与静态相同

String str=intent.getStringExtra("dongtai");
Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
Log.d("MyBroadcastreceiver", str);

4:取消广播 

unregisterReceiver(my);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  broadcastreceiver