一、 广播的类型主要可分为 有序广播 和 标准广播 两种 。
标准广播 是一种完全异步执行的广播,在发出后,所有广播接收器几乎都会在同一时刻接收到这条广播消息。
有序广播 是一种同步执行的广播,在广播发出之后,同一时间只能有一个广播接收器能够收到这条广播消息。
二、 广播接收器 分为 静态注册 动态注册
动态注册监听
1、创建一个继承自BroadcastReceiver的类(假定为A),重写 onReceive()。
2、创建IntentFilter 实例(假定为b)。并给他添加 android.net.conn.CONNECTIVITY_CHANCE的action
3、创建一个A的对象a
4、调用registerReceiver(a,b);进行广播器注册。
代码示例
........
private IntentFilter intentFilter;
private A a;
@Override
protected void onCreated(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter=new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
a = new A();
registerReceiver(a,intentFilter);
}
class A extends BroadcastReceiver{
@Override
public void onReceive(Context context,Intent intent){
@Override
public void onReceive(Context context,Intent intent){
Toast.makeText(context,"network changes",Toast.LENGTH_SHORT).show();
}
}
注意事项:
动态注册的广播接收器一定都要取消注册才行。即在onDestroy()方法中调用 unregisterReceiver()
代码示例:
@Override
protected void onDestroy(){
super.onDestroy();
unregisterReceiver(a);
}
静态注册
静态广播器不需要onCreate中创建任何对象。
只需创建相应继承自BroadcastReceiver的类即可,然后重写onReceive()方法就行了。
静态的广播器一定要在AndroidManifest.xml文件中注册才可以使用。
需要在<application>标签中添加
<receiver>标签
示例代码:
<receiver
android:name=".BootCompleteReceiver”
android:enabled="true" //是否启用这个广播器
android:exported="true"> //是否允许这个广播器接受本程序以外的广播
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETE"/> //给广播器添加要接受的action
</intent-filter>
</receiver>
三 、注意
Android系统为了保护用户设备的安全和隐私,做了严格的规定:如果程序需要进行一些对用户来说比较敏感的操作,就必须在配置文件中声明权限才可以,否则会直接崩溃。
即在AndroidManifest文件,在里面加入如下权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>//此处添加的是访问系统网络状态的状态权限。
另外
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>//此处添加的是访问开机状态的权限。