Android 接收系统广播(动态和静态)
1、标准广播:是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎会在同一时刻接收到这条广播信息,它们之间没有先后顺序。效率高、无法被截断。
2、有序广播:是一种同步执行的广播,在广播发出后,同一时刻只会有一个广播接收器能够接收到这条广播,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。
这种广播有先后顺序,优先级高的广播接收器就可以先接收到广播,并且前面的广播接收器可以截断正在传播的广播。
3、动态注册广播:在主代码中直接注册。
4、创建广播接收器:新建一个类,让它继承自BroadcastReceiver,并重写父类的onReceive()方法。有广播到来时,onReceive()方法中就会得到执行,具体逻辑就写在这个方法中。
5、在onCreate()方法中使用registerReceiver(BroadcastReceiver receiver, IntentFilter filter) 方法进行动态注册,第一个参数传入创建的类的实例,第二个参数传入IntentFilter的实例。
6、下面的代码实现网络状态的监听:
public class MainActivity extends AppCompatActivity {
private IntentFilter intentFilter;
private NetworkChangeReceiver networkChangeReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); //action中的值是要监听的系统广播
networkChangeReceiver = new NetworkChangeReceiver();
registerReceiver(networkChangeReceiver,intentFilter); //用registerReceiver()方法进行注册,分别传入自定义类的实例和意图实例
}
//动态注册的广播接收器一定要取消注册,使用unregisterReceiver()方法取消注册
protected void onDestory(){
super.onDestroy();
unregisterReceiver(networkChangeReceiver);
}
//自定义一个类继承自BroadcastReceiver,并重写他的onReceive()方法
class NetworkChangeReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent){
Toast.makeText(context,"network changes",Toast.LENGTH_SHORT).show();
}
}
}
7、最后要在AndroidManifest.xml中声明权限,否则程序会直接崩溃。注意:中间那行才是申请权限,
package="example.com.broadcasttest">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application> </application>
8、模拟器的API要大于等于24才能运行以上代码。仔细、仔细、仔细!!!!千万不要写错单词
9、静态注册广播:在AndroidManifest中注册,不必启动程序就能实现接收广播。
10、以下代码实现接收开机广播:在包名上右键,New—Other—Broadcast Receiver,更改广播接收器的名字,勾选Exported和Enabled。这两个属性分别代表广播接收器接收本程序意外的广播和是否启用这个广播接收器。
package example.com.broadcasttest; import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast; public class BootCompleteReceiver extends BroadcastReceiver { @Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"Boot Complete",Toast.LENGTH_SHORT).show();
}
}
<!--应用可以监听该广播,成为自启动权限,但是会拖慢开机速度-->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 。。。。。。。。。。。 <receiver
android:name=".BootCompleteReceiver"
android:enabled="true"
android:exported="true">
<!--由于系统启动后会发出一条值为"android.intent.action.BOOT_COMPLETED"的广播,所以在下面的标签中添加了action-->
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
10、onReceive()方法中写需要实现的逻辑,但是不要在这方法中写太多逻辑或者进行任何耗时的操作,因为广播接收器中是不允许开启线程的,当方法中运行了较长时间而没有结束,程序就会报错。
Android 接收系统广播(动态和静态)的更多相关文章
- Android接收系统广播
Android内置了很多系统级别的广播,我们可以在应用程序中通过监听这些广播来得到各种系统的状态信息.比如手机开机完成后会发出一条广播,电池的电量发生变化会发出一条广播,时间或时区发生改变也会发出一条 ...
- android: 接收系统广播
Android 内置了很多系统级别的广播,我们可以在应用程序中通过监听这些广播来得到 各种系统的状态信息.比如手机开机完成后会发出一条广播,电池的电量发生变化会发出一 条广播,时间或时区发生改变也会发 ...
- Android开发之接收系统广播消息
BroadcastReceiver除了接收用户所发送的广播消息之外.另一个重要的用途:接收系统广播. 假设应用须要在系统特定时刻运行某些操作,就能够通过监听系统广播来实现.Android的大量系统事件 ...
- android接收短信——framework处理流程(android 5.1)
modem层不懂,所以直接从RIL.java开始.以电信卡接收短信为例 modem通知RIL.java中的 RILReceiver处理接收信息 class RILReceiver implements ...
- Android接收短信
Android收到短信时会广播android.provider.Telephony.SMS_RECEIVED消息,因此只要定义一个Receiver,收听该消息,就能接收短信. <receiver ...
- android: 接收和发送短信
8.2 接收和发送短信 收发短信应该是每个手机最基本的功能之一了,即使是许多年前的老手机也都会具备这 项功能,而 Android 作为出色的智能手机操作系统,自然也少不了在这方面的支持.每个 A ...
- Android常用系统广播
关于Intent的使用,可参阅前章:http://www.cnblogs.com/caidupingblogs/p/5101669.html //关闭或打开飞行模式时的广播 Intent.ACTION ...
- Android 接收短信
启动程序时启动一个service,在service里注册接收短信的广播,当手机收到短信里,打印出短信内容跟电话号码. package com.lmy.SmsListener; import andro ...
- Android接收wifi路由器发送过来的一组字节数据
1.字节数组转换为字符串 byte[] byBuffer = new byte[20];... ...String strRead = new String(byBuffer);strRead = S ...
随机推荐
- mysql 开发进阶篇系列 27 数据库字符集设置
在安装完数据库后,使用汉字插入到表中,会报错,需要修改字符集类型,如下图所示: -- 插入汉字时报错 INSERT INTO User2 VALUES('张三') -- 查看字符集 SHOW VARI ...
- NoSuchFieldError
最近用Fresco框架加载GIF动态图片,遇到一个bug,记录下来,以供后来者少走弯路: 各种百度,最后参照Fresco官方文档,将原有的 fresco:1.3.0替换成0.12.0即: 在APP b ...
- jq通过对象获取其ID值,再简单ajax传到后台改值
<tbody> <tr> <#if scopes?exists> <#list scopes as scopes> <td id='${(scop ...
- myeclipse 添加mybatis generator插件
在红色的方框中输入下面的网址,一直下一步,最后finish即可. https://dl.bintray.com/mybatis/mybatis-generator/
- 只知道ajax?你已经out了
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由前端林子发表于云+社区专栏 随着前端技术的发展,请求服务器数据的方法早已不局限于ajax.jQuery的ajax方法.各种js库已如雨 ...
- Scala函数与函数式编程
函数是scala的重要组成部分, 本文将探讨scala中函数的应用. scala作为支持函数式编程的语言, scala可以将函数作为对象即所谓"函数是一等公民". 函数定义 sca ...
- html 颜色选择器 亲测,很好用
@*以下 是测试html 颜色选择器的*@ @*<a href="#" mce_href="#" onclick="initColorPicke ...
- Asp.Net初学小结
第一章 1.搭建Asp.net开发环境 1).net FrameWork(VS) 2)IIS(xp:5.1,2003:6.0,vista:70,win7:7.5) C:\Windows\Mic ...
- LeetCode链表相加-Python<二>
上一篇:LeetCode两数之和-Python<一> 题目:https://leetcode-cn.com/problems/add-two-numbers/description/ 给定 ...
- 如何简单的在 ASP.NET Core 中集成 JWT 认证?
前情提要:ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统 文章超长预警(1万字以上),不想看全部实现过程的同学可以直接跳转到末尾查看成果或者一键安装相关的 nuget 包 自上一 ...