初识安卓的另一个重要的组件---广播。

1、广播的分类

  • 标准广播:是一种完全异步执行的广播,在广播发出之后,所有的广播 接收器几乎都会在同一时刻接收到这条广播消息,因此它们之间没有任何先后顺序可言。这种广播的效率会比较高,但同时也意味着它是无法被截断的。

  • 有序广播:是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。所以此时的广播接收器是有先后顺序的,优先级高的广播接收器就可以先收到广播消息,并且前面的广播接收器还可以截断正在传递的广播,这样后面的广播接收器就无法收到广播消息了。

2、广播的注册方式

1、动态注册

动态注册是在app运行时注册。在需要注册的地方写以下代码(监听网络状态为例):

 /**
* 下面是广播的代码
*/

// intentFilter = new IntentFilter();
// intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
// myInternetReceiver = new MyInternetReceiver();
// registerReceiver(myInternetReceiver,intentFilter);

并定义一个内部类,继承Androidx的BroadcastReceiver。

//    //自定义的广播
// class MyInternetReceiver extends BroadcastReceiver{
// @Override
// public void onReceive(Context context, Intent intent) {
// Toast.makeText(context,"internet change",Toast.LENGTH_SHORT).show();
// ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
// NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
// if (activeNetworkInfo != null && activeNetworkInfo.isAvailable()){
// Toast.makeText(context,"现在有网",Toast.LENGTH_SHORT).show();
// }else {
// Toast.makeText(context,"没网了",Toast.LENGTH_SHORT).show();
// }
// }
// }

这样就可以动态注册。

2、静态注册

为了方便可以直接new一个自定义的类:new--other---Broadcast Receiver

新建后AS便帮助我们在AndroidManifest.xml中注册了该广播接收器。

因为此处是用开机自启动作示范,所以在该广播接收器内加入要接受的广播类型即开机

所以还需要添加一个权限:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

至此静态注册已经完成,重启模拟器后便可以接收到广播。

因为是按照《第一行代码》所学习的,那时Android版本还比较低,在后来谷歌更改了静态注册的规则,像这种开启自启动的(流氓)广播已经被禁止了。但是有一些豁免名单里的内容可以静态注册。

3、自定义广播

1、标准广播

做法与静态广播相同,不过不同的是监听的广播是自己自定义的。要新建一个继承BroadcastReceiver的类

然后在需要发送广播的地方插入逻辑代码:

Intent intent = new Intent("com.example.firstdemo.MY_BROADCAST");
Log.i("mytag", "onClick: "+getPackageName());
intent.setComponent(new ComponentName(getPackageName(),"com.example.firstdemo.MyBroadcastReceiver"));
sendBroadcast(intent);

注意:intent.setComponent()方法在书中并未使用,也是因为目前谷歌的规则更改后需要添加的内容,明确指定处理这个intent的组件。既然是使用intent来进行发送广播,那么当然可以在发送广播的时候传递一些数据,以待以后深入。

最新文章

  1. C++学习笔记 知识集锦(一)
  2. DropDownList 控件不能触发SelectedIndexChanged 事件
  3. .NET笔试题集(一)
  4. Eclipse 反编译插件安装jad
  5. 1562: [NOI2009]变换序列 - BZOJ
  6. 利用putty实现文件在linux上传和下载
  7. selenium grid java 资料
  8. Python 获取Facebook用户Friends的爱好类别中的Top10
  9. CSS彻底研究(1)
  10. Spring(二)——IoC
  11. Windows Server 2012启用Windows功能NetFx3时出错解决方法
  12. Java中ArrayList和LinkedList性能的比较(结果总是怪怪的,如果有不当还请指出)。
  13. 原型及原型链,以及prototype和__proto__属性(笔记便于以后复习)
  14. AIO5程序中审批跳转条件:超过某一个值必须总经理审批
  15. Servlet之cookie处理
  16. Excel—数组
  17. json转换对象中出现null属性的解决方法
  18. PS 制作彩色烟雾
  19. EEPROM
  20. [题目] Luogu P5038 [SCOI2012]奇怪的游戏

热门文章

  1. SpringBoot+MySQL,如何整合并使用MyBatis框架
  2. flex-shrink值的计算
  3. Docker部署spring boot项目
  4. 缩点Tarjan算法解析+[题解]受欢迎的牛
  5. property内置装饰器函数和@name.setter、@name.deleter
  6. Spring Cloud Gateway原理
  7. Mysql数据安全备份
  8. cakephp中sql查询大于
  9. 面试必看!靠着这份字节和腾讯的面经,我成功拿下了offer!
  10. 【JAVA基础】数组练习案例一