广播 BroadcastReceiver 用于接收程序所发出的Broadcast Intent, 也可以说他是一个全局监听器 监听所有程序的广播消息。
广播分为 有序广播 NormalBroadcast 普通广播
优点 效率高,但是接收者不能讲结果传递给下一个接受者 无法终止
优点 可以将数据接着传递给下一个接收者 ,下一个接收者 不仅可以得到广播的数据 还能得到上一个接受者存入的数据 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);