Android 四大组件之BroadcastReceiver 广播

参考大神的理解 :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);


猜你喜欢

转载自blog.csdn.net/fanaw/article/details/51870605