Android中,Broadcast是一种在应用程序之间传输信息的机制。有个中文名字,广播。顾名思义,


就是像收音机一样,只要将频率调成广播台一致就可以收听到相对应的内容,android中也是这个


道理,也可理解为监听,只要注册了相对应的监听,一旦系统有这方面的信息,马上就会被注册的


广播发现,可以在onReceive(Context context, Intent intent)里做相应的处理。
常见的系统广播比如 开机监听 电量监听 短信监听 电话监听 锁屏监听 等等,注册了上述广播,


就意味着正常情况下,只要手机启动 电量满了或是电量低了 来短信了 有电话来了 屏幕锁了,我


们这边都能在相对应注册广播的地方收到信息,回调 BroadcastReceiver 中的onReceive(Context 


context, Intent intent)方法,并且有相对应的参数返回。


广播在使用之前需要先注册,广播的注册方式有两种,一种是在配置清单注册,手机开机后,全程


监控该app的生命周期,处于随时被触发状态;另一种是在app运行后在java代码里注册,通过


IntentFilter注册。


网络监听 java代码中注册
mConnManger = (ConnectivityManager) getSystemService(
Context.CONNECTIVITY_SERVICE);
IntentFilter netFilter = new IntentFilter(
ConnectivityManager.CONNECTIVITY_ACTION);
netFilter.addCategory(Intent.CATEGORY_DEFAULT);
mIsNetReceiver = new NetChangeListenerReceiver(mNetShow, mConnManger);
registerReceiver(mIsNetReceiver, netFilter);


解除广播绑定
unregisterReceiver(mIsNetReceiver);


这种注册,一般都是在activity中注册,通过activity的生命周期控制,比如在 onCreate() 和 


onDestroy()中,绑定和解除。或者通过 点击事件 来绑定广播,但为保险起见,在activity 结束


时要做非空解除广播判断。


一般情况下,系统级的广播都是在配置清单中注册,自定义的广播在java代码中注册。先说系统级


广播,在配置清单中注册后就可以直接使用了。比如锁屏广播,配置清单注册后,










如果不想一开始就监听屏幕锁屏解屏,比如说有个设置,里面有个锁屏开关,点击后才有锁屏解屏


的功能,该怎么做呢?这时候就用到了第二种方法,在代码中注册,当 按钮 点击事件触发,在点


击回调里做 广播的注册,


screenBroadcastReceiver = new ScreenBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_SCREEN_OFF);//当屏幕锁屏的时候触发
intentFilter.addAction(Intent.ACTION_SCREEN_ON);//当屏幕解锁的时候触发
registerReceiver(screenBroadcastReceiver, intentFilter);


同时加入标示标记,当下次再点击时,解除广播注册,
unregisterReceiver(screenBroadcastReceiver);


还有一种广播,也是在java代码中注册,这种广播是自定义广播。常用的一个场景,在service中


有一操作,完成后需要在activity页面上做相应的操作,由于service不能直接操作,这时候就需


要通过广播发送信息,到activity接受数据,并作出想用UI界面改变。


具体来说,分两步走,首先是在activit中注册广播,第二步是在service中完成数据获取后,发送


广播。这里面有一个关键的地方,就是注册广播的标示,要保持唯一和一致。即 


intentFilter.addAction(flag);中的flag。
在activity中 注册


receiveBroadCast = new ReceiveBroadCast();
IntentFilter filter = new IntentFilter();
filter.addAction(flag);    //只有持有相同的action的接受者才能接收此广播
registerReceiver(receiveBroadCast, filter);


public class ReceiveBroadCast extends BroadcastReceiver
{
 
        @Override
        public void onReceive(Context context, Intent intent)
        {
            //得到广播中得到的数据,并显示出来
            String message = intent.getStringExtra("data");
            txtShow.setText(message);
        }
 
}




在service中发送广播数据


Intent intent = new Intent();  //Itent就是我们要发送的内容
intent.putExtra("data", "this is data ");  
intent.setAction(flag);   //设置action,和这个action相同的的接受者才能接收广播
sendBroadcast(intent);   //发送




发送后,activit中onReceive(Context context, Intent intent)方法马上做出相应处理。


广播又分为有序广播和普通广播,
a.普通广播
不可中断, 不能互相传递数据.
b.有序广播
可中断, abortBroadcast()
可以互相传递数据, getResultCode(), getResultData(), getResultExtras(), setResult()
有兴趣的可以在看看文档了解,平时正常情况下用的不多。

更多相关文章

  1. [Android]从新旧API看android代码演进
  2. php实现post请求 接收android客户端json数据 存储数据库 并返回j
  3. Android中用Application类实现全局数据变量的使用
  4. android 代码设置EditText的hint字符
  5. android代码审查工具---lint工具的使用
  6. Android之数据存储详解(二)之SQLite数据库存储数据
  7. Android数据存储方式(一)文件

随机推荐

  1. Android启动流程---App层
  2. Android3.1比2.2多了一个android…
  3. [置顶] Android NDK开发 Android JNI项目
  4. Android - SurfaceView + MediaPlayer实
  5. android画经过多点的曲线
  6. #菜鸟之旅#Android Studio开发JNI工程—
  7. Android为什么选择Java作为开发语言之我
  8. Android的startActivityForResult()与onA
  9. Android中Image的简单实例详解
  10. Android开发实践:自定义带消息循环(Looper)