Android 11 使用 BroadcastReceiver 监听短消息
使用装有MIUI系统的小米手机,静态注册的广播接收器监听短消息。
- 在
AndroidManifest.xml中声明权限
<uses-permission android:name="android.permission.RECEIVE_SMS" />
- 在
AndroidManifest.xml中声明广播接收器
<receiver
android:name=".SmsReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
- 广播接收器代码:
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 从intent中获取消息
SmsMessage[] smsMessages = getMessagesFromIntent(intent);
// 获取短信发送者号码
String senderNumber = smsMessages[0].getOriginatingAddress();
// 组装短信内容
StringBuilder content = new StringBuilder();
for (SmsMessage smsMessage : smsMessages) {
content.append(smsMessage.getMessageBody());
}
// 获取卡槽位置
Bundle bundle = intent.getExtras();
int slot = bundle.getInt("android.telephony.extra.SLOT_INDEX", -1);
}
}
要点:
- 先通过
getMessagesFromIntent(Intent)获取SmsMessage数组 - 再通过遍历
SmsMessage数组,把每一条SmsMessage的getMessageBody()组装成短信内容 - 短信发送者号码可以通过首个
SmsMessage对象的getOriginatingAddress()方法获得 - 对于双卡手机,还可以在广播到达的
Intent的Bundle中, 通过Bundle.getInt("android.telephony.extra.SLOT_INDEX", -1), 来获取卡槽的位置。0为卡槽1,1为卡槽2。获取失败为-1。
注意:
- MIUI 等定制系统,申请权限可能不会弹窗,需要手动去设置中打开权限。
- MIUI 等定制系统,需打开应用的自启动功能,方可在短信到达时后台启动应用,运行广播接收器中相应逻辑。
- 广播接收器
onReceive方法的超时限制有 10s,超过10s后系统会弹 ANR 弹窗。
Android 11 使用 BroadcastReceiver 监听短消息的更多相关文章
- 通过broadcastreceiver 监听短信问题
在mainfest中 订阅 短信到来的广播时候 发现找不到 <action android:name="android.provider.Telephony.SMS_RECEIV ...
- 【转】]监听SMS消息/编程实现短信拦截
当设备接收到一条新的SMS消息时,就会广播一个包含了android.provider.Telephony.SMS_RECEIVED动作的Intent.注意,这个动作是一个字符串值,SDK 1.0不再包 ...
- Android 监听短信(同时监听广播和数据库)
暗扣,强烈谴责这种侵害用户利益的行为... 下面给大家介绍Android暗扣原理....... Android4.4以下的系统玩游戏就要小心了哈 暗扣方式之一:短信订购,即监听--------拦截- ...
- Android手机上监听短信的两种方式
Android手机上监听短信有两种方式: 1. 接受系统的短信广播,操作短信内容. 优点:操作方便,适合简单的短信应用. 缺点:来信会在状态栏显示通知信息. AndroidManifest.xml: ...
- android 监听短信数据库,制作短信控制工具,控制别人的手机!!(一)
序言:本程序示例本着简洁易懂的目的,只做了简单的功能实现,需要用户启动应用,收到短信才有效果.作者将会在后面的(二)篇中加入服务后台运行.自动启动功能,实现一个真正的短信控制工具.本文的目的很简单,让 ...
- Android手机使用广播监听手机收到的短信
我们使用的Android手机在收到短信的时候会发出一条系统广播.该条广播中存放着接收到的短信的详细信息.本文将详细介绍如何通过动态注册广播来监听短信. 注册广播有两种方式,一种是动态注册,另一种是静态 ...
- android菜鸟学习笔记23----ContentProvider(三)利用内置ContentProvider监听短信及查看联系人
要使用一个ContentProvider,必须要知道的是它所能匹配的Uri及其数据存储的表的结构. 首先想办法找到访问短信及联系人数据的ContentProvider能接受的Uri: 到github上 ...
- android 监听短信并发送到服务器
1. 接受系统的短信广播,操作短信内容. 优点:操作方便,适合简单的短信应用. 缺点:来信会在状态栏显示通知信息. 2. 应用观察者模式,监听短信数据库,操作短信内容. 实例如下: SystemE ...
- Android笔记--监听短信内容
监听短信内容 就比如说是在我们用一个软件需要使用"获取验证码"的功能时,能够跟短信的验证码互通,实现较为完整的登录功能: 监听短信内容主要是利用了contentObserver实现 ...
- 内容观察者 ContentObserver 监听短信、通话记录数据库 挂断来电
Activity public class MainActivity extends ListActivity { private TextView tv_info; private ...
随机推荐
- 2021-3-9 保存csv格式文件
public void SaveCSV(DataTable dt, string fullPath) { FileInfo fi = new FileInfo(fullPath); if (!fi.D ...
- Echarts: 同时显示柱状图和前端
完整代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- BTC中的数据结构
BTC中的数据结构 普通指针 普通指针存储的是某个结构体在内存中的地址(假如P是指向一结构体的指针,那么P里面存放的就是该结构体在内存中的起始位置) Hash pointer(哈希指针) 对于如下的节 ...
- PoW是什么?
PoW是什么? 工作量证明(proof of work,PoW)是一种用于确认和验证区块链交易和新区块有效性的共识算法.区块链中常见的工作量证明算法包括比特币的SHA-256.以太坊的Ethash.莱 ...
- 无linux基础也能熟练掌握git的基本操作
git是一个用来管理项目的工具,它的远程仓库有github.gitee.gitlab代码托管中心,既可以用于个人共享代码,又可以用于团队进行项目的协作与发布,那么我们一起来了解一下git该如何使用~ ...
- NFS快速入门(一):简介、原理
NFS网络文件共享存储 什么是NFS NFS 是 Network File System 的缩写,中文意思是网络文件系统.它的主要功能是通过网络(一般是局域网)让不同主机系统之间可以共享文件或目录.N ...
- 服务端不回应客户端的syn握手,连接建立失败原因排查
背景 测试环境有一个后台服务,部署在内网服务器A上(无外网地址),给app提供接口.app访问这个后台服务时,ip地址是公网地址,那这个请求是如何到达我们的内网服务器A呢,这块我咨询了网络同事,我画了 ...
- [kubernetes]二进制部署k8s集群-基于containerd
0. 前言 k8s从1.24版本开始不再直接支持docker,但可以自行调整相关配置,实现1.24版本后的k8s还能调用docker.其实docker自身也是调用containerd,与其k8s通过d ...
- Redis从入门到放弃(11):雪崩、击穿、穿透
1.前言 Redis作为一款高性能的缓存数据库,为许多应用提供了快速的数据访问和存储能力.然而,在使用Redis时,我们不可避免地会面对一些常见的问题,如缓存雪崩.缓存穿透和缓存击穿.本文将深入探讨这 ...
- 数据可视化【原创】vue+arcgis+threejs 实现立体光圈闪烁效果
本文适合对vue,arcgis4.x,threejs,ES6较熟悉的人群食用. 效果图: 素材: 主要思路: 先用arcgis externalRenderers封装了一个ExternalRender ...