Android study --- 广播
广播接收者
- 在Android系统运行时会产生很多事件,事件产生时,回想系统发送广播,只要向系统发送广播,系统就知道发生了相应的事件,从而执行相对应的代码。在系统中只要使用广播接受者,就可以接收广播
创建广播接受者
- 1、定义Java类继承BroadcastReceiver
- 2、在清单文件爱中定义receiver节点,定义属性,指定广播接受者Java类的命名
- 3、在intent-filter的节点中,指定action子节点,action的值必须跟要接受的广播中的action匹配,比如,如果要接受打电话广播,
那么action的值必须指定为
<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
- 4、因为打电话广播中所包含的action,就是"android.intent.action.NEW_OUTGOING_CALL",所以我们定义广播接收者时,
action必须与其匹配,才能收到这条广播- 5、即便广播接收者所在进程已经被关闭,当系统发出的广播中的action跟该广播接收者的action匹配时,系统会启动该广播接收者所在的进程,并把广播发给该广播接收者
- 6、获取广播中的数据,并且重新封装数据,放入到广播中去
//接收到广播时就会调用
@Override
public void onReceive(Context context, Intent intent) {
//添加IP线路
//在打电话广播中,会携带拨打的电话的号码,通过以下代码获取到
String number = getResultData();
if(number.startsWith("0")){
SharedPreferences sp = context.getSharedPreferences("ip", Context.MODE_PRIVATE);
String ipNumber = sp.getString("ipNumber", "");
//把IP线路号码添加至用户拨打号码的前面
number = ipNumber + number;
//把新的号码重新放入广播中
setResultData(number);
abortBroadcast();
}
}
短信防火墙
系统发送短信广播时,是怎么把短信内容存入广播的,我们就只能怎么取出来
如果短信过长,那么发送时会拆分成多条短信发送,那么短信广播中就会包含多条短信
4.0之后,广播接收者所在进程如果从来没启动过,那么广播接收者不会生效
4.0之后,如果系统自动关闭广播接收者所在进程,在广播中的action跟该广播接收者的action匹配时,系统会启动该广播接收者所在的进程,但是如果是用户手动关闭该进程,
那么该进程会进入冻结状态,再也不会启动了,直到用户下一次手动启动该进程public class SmsReceiver extends BroadcastReceiver { @Override
public void onReceive(Context context, Intent intent) {
//拿到短信的信息
//短信内容封装在intent中
Bundle bundle = intent.getExtras();
//以pdus为键,取出一个object数组,数组中的每一个元素,都是一条短信
Object[] objects = (Object[]) bundle.get("pdus");
//拿到广播中的所有短信
for (Object object : objects) {
//通过pdu来构造短信
SmsMessage sms = SmsMessage.createFromPdu((byte[])object);
if(sms.getOriginatingAddress().equals("138438")){
//阻止其他广播接收者收到这条广播
abortBroadcast();
// SmsManager.getDefault().sendTextMessage(sms.getOriginatingAddress(), null, "你是个好人", null, null);
}
// System.out.println(sms.getMessageBody());
}
}
}
清单文件设置
<receiver android:name="com.itheima.smslanjie.SmsReceiver">
//android:priority="1000"设置该广播的等级
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
广播的分类
无序广播
- 所有与广播中的action匹配的广播接收者都可以收到这条广播,并且是没有先后顺序,视为同时收到
有序广播
- 所有与广播中的action匹配的广播接收者都可以收到这条广播,但是是有先后顺序的,按照广播接收者的优先级排序
Android study --- 广播的更多相关文章
- 【Android】广播BrocastReceiver
1.Android中广播主要分为两种:标准广播和有序广播. 标准广播:完全异步执行.广播发出后,所有的广播接收器几乎在同一刻收到广播事件,没有先后顺序之分. 优点:效率高 缺点:不能被截断 有序广播: ...
- Android之 广播
(以下内容是阅读郭霖大神的<第一行代码>后自己总结的) 1.概述 广播是Android的四大组件之一. Android的广播机制十分灵活. 2.发送广播 如上图Android的广播主要分为 ...
- Android学习--广播机制
广播机制简介 Android的广播可以分为两种类型的,标准广播和有序的广播: 标准广播: 是一种完全异步执行的广播,在广播发出去之后,所有的广播接收器几乎是同一时接收到这条广播. 有序广播: 是一 ...
- Android 通过广播获取网络状态
Android系统网络连接状态的改变会发一个广播,注册一个广播接收者,实时动态的检测网络状态,及时提醒用户,优化用户体验. 本文仅提供WIFI 状态的检测作为参考,其他网络连接方式请 ...
- Android开机广播
有些时候我们常常需要某个程序开机运行.在这个时候我们就需要监听系统的开机广播,然后启动我们的程序即可. 不多说 直接上代码: public class BootReceiver extends Bro ...
- android之广播(二)
广播接受者不仅可以通过清单文件来向系统注册,也可以通过代码来注册.并且有的广播必须通过代码来注册广播接受者. 锁屏和解锁广播 电量改变广播 打开屏幕和关闭屏幕 这里将广播接收者写在服务里面 <? ...
- android之广播(一)
Android中的广播 系统在运行过程中会产生很多事件,某些事件产生的时候,比如:电量的改变,收发短信.拨打电话.屏幕解锁.开机等等,系统会发送广播.只要应用程序接受到这条广播就知道系统发生了相应的事 ...
- Android -- 简单广播接收与发送(2)--动态注册广播接收器
1. 效果图
- Android -- 简单广播接收与发送(1)
1. 效果图
随机推荐
- oracle 参考
create or replace function fun_try(v_name varchar,v_outname out varchar)return varchar2 is Result va ...
- php 登录注册api接口代码
/** *一览(www.yl1001.com) * PHP开发API接口 服务端 */ require 'conn.php'; //连接数据库的文件 header('Content-Type:text ...
- Js解析浏览器路径的方法
方法如下:function parseURL(url) { var a = document.createElement('a'); //创建一个链接 a.href = url; return { s ...
- TensorFlow安装(Ubuntu 16.04)
原文链接 github not support on this platform pip安装: # Ubuntu/Linux 64-bit $ sudo apt-get install python- ...
- sh脚本异常:/bin/sh^M:bad interpreter: No such file or directory
在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory. 分析:这是不同系统编码格式引起的:在windows系统中 ...
- TIJ——Chapter Five:Initialization & Cleanup
Method overloading |_Distinguishing overloaded methods If the methods hava the same name, how can Ja ...
- size_t 类型
1 关于size_t定义 size_t是一种数据相关的无符号类型,它被设计得足够大以便能够内存中任意对象的大小.在cstddef头文件中定义了size_t类型,这个文件是C标准库stddef.h头文件 ...
- git commit 代码时提示: Warning: Your console font probably doesn‘t support Unicode.
git 提交代码是会遇到以下问题, git commit 代码时提示: Warning: Your console font probably doesn‘t support Unicode. If ...
- MFC打开系统关于对话框
HICON Icon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); //IDR_MAINFRAME为图标的ID ...
- C与C++中的常用提高程序效率的方法
1.用a++和++a及a+=1代替a=a+1,用a--和--a及a-=1代替a=a-1 通常使用若把一个函数定义为内联函数,则在程序编译阶段,编译器就会把每次调用该函数的地方都直接替换为该函数体中的代 ...