Android 广播机制 之 动态注册和静态注册。

    一    广播的类型主要可分为 有序广播 和 标准广播 两种 。

标准广播 是一种完全异步执行的广播,在发出后,所有广播接收器几乎都会在同一时刻接收到这条广播消息。

有序广播  是一种同步执行的广播,在广播发出之后,同一时间只能有一个广播接收器能够收到这条广播消息。

    二、     广播接收器 分为 静态注册 动态注册

动态注册监听

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"/>//此处添加的是访问开机状态的权限。


猜你喜欢

转载自blog.csdn.net/qq_41105058/article/details/79697927
今日推荐