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广播机制详解
  2. CM android的CMUpdater分析(二)
  3. Android自定义底部显示对话框
  4. android 网络广播 类似QQ动态检查网络
  5. android 开发使用 kotlin 进行点击事件监听和界面跳转,直接传也方
  6. android的意图
  7. Android使用EventBus传递事件
  8. Android(安卓)日期时间选择器
  9. Android小项目之欢迎滑动页面(页面布局&底部点点)

随机推荐

  1. 四种好用的PHP自定义加密函数(可逆/不可逆
  2. php实现上传图片功能
  3. laravel输出xml数据,php输出xml格式数据
  4. php上传文件找不到临时文件夹(解决方法)
  5. php 解决项目中多个自动加载冲突问题
  6. PHP每15分钟自动更新网站地图(减少服务器
  7. php会话处理分析
  8. Jupyter Notebook下安装PHP内核
  9. PHP 变量的四大作用域
  10. PHP开发api接口安全验证