Androidx学习笔记(57)--- 短信拦截器
来源:互联网 发布:scdma是什么网络类型 编辑:程序博客网 时间:2024/05/01 01:30
系统收到短信时会产生一条广播,广播中包含了短信的号码和内容
定义广播接收者接收短信广播
public void onReceive(Context context, Intent intent) {//拿到广播里携带的短信内容Bundle bundle = intent.getExtras();Object[] objects = (Object[]) bundle.get("pdus");for(Object ob : objects ){ //通过object对象创建一个短信对象 SmsMessage sms = SmsMessage.createFromPdu((byte[])ob); System.out.println(sms.getMessageBody()); System.out.println(sms.getOriginatingAddress());}
}
- 系统创建广播时,把短信存放到一个数组,然后把数据以pdus为key存入bundle,再把bundle存入intent
清单文件中配置广播接收者接收的广播类型,注意要设置优先级属性,要保证优先级高于短信应用,才可以实现拦截
<receiver android:name="com.exp.smslistener.SmsReceiver"> <intent-filter android:priority="1000"> <action android:name="
android.provider.Telephony.SMS_RECEIVED
"/> </intent-filter></receiver>
添加权限
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
4.0以后广播接收者安装以后必须手动启动一次,否则不生效
- 4.0以后广播接收者如果被手动关闭,就不会再启动了
代码
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//拿到短信的信息
//短信内容封装在intent中
Bundle bundle = intent.getExtras();
//以pdus为键,取出一个object数组,数组中的每一个元素,都是一条短信
//pdu:协议数据单元 pdu在这里代表的就是短信
Object[] objects = (Object[]) bundle.get("pdus");
//拿到广播中的所有短信
for (Object object : objects) {
//通过pdu来构造短信
SmsMessage sms = SmsMessage.createFromPdu((byte[])object);
//这里使用的模拟数据13800138000 该数据应该从数据库中获取
if(sms.getOriginatingAddress().equals("13800138000")){
//阻止其他广播接收者收到这条广播
abortBroadcast();
//SmsManager.getDefault().sendTextMessage(sms.getOriginatingAddress(), null, "你是个好人", null, null);
}
//System.out.println(sms.getMessageBody());
}
}
}
AndroidManifest.xml
在该文件中进行配置优先级和Action
<receiver android:name="com.exp.smslanjie.SmsReceiver">
<!--此处要配置优先级 范围-1000~1000 -->
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
0 0
- Androidx学习笔记(57)--- 短信拦截器
- Androidx学习笔记(5)--短信发送器
- Androidx学习笔记(3)-- 电话拨号器编写
- Androidx学习笔记(28)--- 网络图片查看器---HttpURLConnection
- Androidx学习笔记(32)--- Html源文件查看器
- Androidx学习笔记(56)--- IP拨号器
- Androidx学习笔记(66)--- 简单音乐播放器原理
- Androidx学习笔记(77)--- 音乐播放器2
- Androidx学习笔记(9)-- logcat
- Androidx学习笔记(18)-- junit单元测试
- Androidx学习笔记(19)-- SQLite 简介
- Androidx学习笔记(21)-- SQLite 事务
- Androidx学习笔记(24)-- ArrayAdapter&SimpleAdapter
- Androidx学习笔记(24)--对话框
- Androidx学习笔记(48)--- 创建Activity
- Androidx学习笔记(51)--- Activity生命周期
- Androidx学习笔记(55)--- 广播接收者
- Androidx学习笔记(62)--- 服务Service
- Androidx学习笔记(52)--- Activity的四种启动模式
- Androidx学习笔记(53)--- 横竖屏切换的生命周期
- Androidx学习笔记(54)--- Activity返回时传递数据
- Androidx学习笔记(55)--- 广播接收者
- Androidx学习笔记(56)--- IP拨号器
- Androidx学习笔记(57)--- 短信拦截器
- Androidx学习笔记(58)--- 监控SD卡状态
- Androidx学习笔记(59)--- 简易勒索软件原理
- Androidx学习笔记(60)--- 监听应用的安装、卸载、更新状态
- IPV6地址数据库导出
- 2月1日-2月13日,10小时,剩3185小时
- 8VC Venture Cup 2016 - Elimination Round题解
- ubuntu下使用CGAL的pro文件
- 超详细Windows版本编译运行React Native官方实例UIExplorer项目(多图慎入)