1、详解
1.1:Android四大组件之一,一种全局的监听器,用于监听系统全局的广播消息。系统大部分消息都以广播形式发布,比如开机启动完成得消息。收到短信的消息,打进出电话消息。
ps:Android系统每次启动完成会向外广播一条消息,告诉所有人启动完成了,只有继承自Brodcast的类能捕捉到这些信息,
1.2: 广播接收也就是说一个播放者,然后就是接受者。也就是一个发送消息,其它为接收。但是这个和聊天室又是有区别的,聊天室是不同的手机发送消息与接收,而广播接收是同一台手机里面应用程序的发送,就像在微信里面要发消息进入QQ。所以我们应该记住两者的关系,不要混淆。
2、如何实现自定义广播
我们拿广播电台来做个比方许许多多不同的广播电台通过特定的频率来发送他们的内容,而我们用户只需要将频率调成和广播电台的一样就可以收听他们的内容了。
2.1:创建广播发送者
a.创建Intent用于启动Brodcast--(intent.setAction(String action) 指定广播的频率、intent.put(String key,String message) 指定广播发送出去的消息)
b.调用sendBrodcast()或者sendOrderedBrodcast方法启动指定的广播类,当发出Brodcast Intent以后,所有匹配该Intent的Brodcast都可能被启动
//获取文本内容 String content=控件.getText().toString(); Intent intent=new Intent(); intent.setAction("com.example.g160828_android_brodcast_send.955"); intent.putExtra("content",content); sendBroadcast(intent);
2.2:创建广播接受者
a.写一个类继承自BrodcastReceiver
b.重写onReceiver(Contest context,Intent intent)方法,intent.getExtra(String key)获取广播中的消息;
c.注册广播接受者
静态注册:在清单文件中注册(1.在<application>节点中添加一个<receiver>节点、2.添加android:name属性--值为类的全路径、3.添加<intent-filter>节点,指定<action>节点),广播接收器的执行不依赖于本应用程序的运行
动态注册:在应用程序被启动执行时注册,相对应应用程序如果退出,广播的注册必须要取消。注册--context.registerReceiver(receiver,filter); 取消注册--context.unregisterReceiver(receiver);
public class Receiver02 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action=intent.getAction(); if ("com.example.g160828_android_brodcast_send.955".equals(action)){ String content=intent.getStringExtra("content"); Log.i("test","receiver02:"+content); } }
<receiver android:name=".Receiver02" android:exported="true" android:enabled="true" > <intent-filter> <action android:name="com.example.g160828_android_brodcast_send.955"></action> </intent-filter> </receiver>
2.3:粘性广播
粘性广播主要是为了解决,在发送完广播之后,动态注册的接收者,也能够收到广播(先发送一广播,我的接收者是通过程序中的某个按钮动态注册的。如果不是粘性广播,我注册完接受者肯定无法收到广播了。这是通过发送粘性广播就能够在我动态注册接受者后也能收到广播)
sendStickyBroadcast(intent); //把以前的sendBrodcast改为这句代码就可以了
发送粘性广播还需要权限:
<uses-permission android:name="android.permission.BROADCAST_STICKY"></uses-permission>
2.4:生命周期
广播接受者的生命周期是非常短暂的,在接收到广播时创建,onReceiver()方法结束之后销毁
2.5:注意事项
广播接收器的执行和Activity以及Service的执行一样都是由Android的Main主线程负责的,所以为了避免对主线程的UI绘制工作产生严重干扰,广播的onReceiver
方法中不能做非常复杂的操作,因为这个方法的执行时间被限定到了10秒之内,否则就会报ANR(Application Not Response)异常