android 本地广播 接收,【Anroid学习笔记】 广播接收器的基本使用

  • Post author:
  • Post category:其他


概念

标准广播

一种完全异步执行的广播,所有的广播接收器几乎可以同时收到这条广播,无法被截断。

?

有序广播

一种同步执行的广播,在同一时刻只有一个广播接收器能收到此条广播消息,优先级高的广播接收器先收到广播消息,可以被截断。

?

接收系统广播

注册广播的方式一般有两种,在代码中注册和在AndroidManifest.xml中注册,前者被称为动态注册,后者被称为静态注册。

?

动态注册

优点:可以灵活地控制广播接收器的注册和注销。

核心代码实现:

onCreater():{

intentFilter = new IntentFilter();

//监听网络状态切换时系统发出的广播消息对应的action

intentFilter.addAction(“android.net.conn.CONNECTIVITY_CHANGE”);

networkChangeReceiver = new NetworkChangeReceiver();

//注册广播接收器

registerReceiver(networkChangeReceiver,intentFilter);

}

onDestroy(){

unregisterReceiver(networkChangeReceiver);

}

class NetworkChangeReceiver extends BroadcastReceiver{

onReceiver(){

//填写接收到对应广播时执行的代码 ……

}

}

?

静态注册

优点:在程序未启动时就能接收到广播。

核心代码实现:

//权限配置

//使用AS的快捷方式创建广播接收器时会自动生成receiver配置

//Enable属性表示是否启用这个广播接收器

//Exported属性表示是否允许这个广播接收器接收本程序以外的广播

//配置需要监听的广播对应的action

注意事项

1. onReceive()方法中不能添加过多的逻辑和耗时操作,因为广播接收器中是不允许开线程的。当onReceive()方法运行了较长时间而没有结束时,程序就会报错。

2. 敏感操作需要先配置权限才能进行。

?

发送自定义广播

发送标准广播

核心代码:

onCreate(){

button.setOnClickListener(new View.OnClickListener(){

public void onClick(View v){

Intent intent = new Intent(“com.example.broadcasttest.MY_BROADCAST”);

//发送标准广播

sendBroadcast(intent);

}

});

}

?

发送有序广播

核心代码:

onCreate(){

button.setOnClickListener(new View.OnClickListener(){

public void onClick(View v){

Intent intent = new Intent(“com.example.broadcasttest.MY_BROADCAST”);

//发送有序广播,第二个参数是一个与权限相关的字符串

sendOrderedBroadcast(intent,null); }

});

}

?

设置广播接收器的优先级:

//配置优先级为100

?

截断有序广播:

onReceiver(){

//截断广播消息

abortBroadcast();

}

?

使用本地广播

使用本地广播机制发出的广播之能够在应用程序内部进行传递,并且广播接收器也只能接收来自本应用程序发出的广播。

?

核心代码实现:

onCreate(){

//获取实例

localBroadcastManager = LocalBrocastManager.getInstance(this); button.setOnClickListener(new View.OnClickListener(){

public void onClick(View v){

Intent intent = new Intent(“com.example.broadcasttest.LOCAL_BROADCAST”);

//发送本地广播

localBroadcastManager.sendBroadcast(intent); }

});

intentFilter = new IntentFilter(); intentFilter.addAction(“com.example.broadcasttest.LOCAL_BROADCAST”);

localReceiver = new LocalReceiver();

//注册本地广播监听器

localBroadcastManager.regesterReceiver(localReceiver,intentFilter);

}

onDestroy(){

//注销本地广播监听器

localBroadcastManager.unregisterReceiver(localReceiver);

}

?

使用本地广播的优点:

1 不必担心发出的广播泄露数据。

2 其他的程序无法发送广播到我们程序的内部。

3 发送本地广播比发送系统全局广播更加高效。

?