Android 拦截短信
来源:互联网 发布:桌面日历记事软件 编辑:程序博客网 时间:2024/05/04 22:43
前言
Android系统可以方便的获取你的短信内容。这样当接收到短信时,你可以截获短信内容,然后根据内容来进行下一步操作。前提是你的app有获取短信内容的权限。
创建Receiver类
当短信来临时,Android系统会发出系统广播。你可以创建你的Receiver类来接收这一广播。
- 继承
BroadcastReceiver
;覆写onReceive
方法;
public class SMSReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { }}
- 定义标志位
SMS_RECEIVED_ACTION
,用来判断是否是来自短信的广播;
public class SMSReceiver extends BroadcastReceiver { public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED"; @Override public void onReceive(Context context, Intent intent) { // 先判断广播消息 String action = intent.getAction(); if (SMS_RECEIVED_ACTION.equals(action)) { } }}
获取短信内容
- 根据解析“pdus”的内容来获取短信内容(pdus是什么有待考证);API 23以后有不同的获取方式,多了参数format,用来区分“3gpp”和“3gpp2”模式;
public class SMSReceiver extends BroadcastReceiver { public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED"; @Override public void onReceive(Context context, Intent intent) { // 先判断广播消息 String action = intent.getAction(); if (SMS_RECEIVED_ACTION.equals(action)) { Bundle bundle = intent.getExtras(); if (bundle != null) { // 取pdus内容,转换为Object[] Object[] pdus = (Object[]) bundle.get("pdus"); String format = bundle.getString("format"); SmsMessage[] messages = new SmsMessage[pdus.length]; // 解析短信 for (int i = 0; i < messages.length; i++) { byte[] pdu = (byte[]) pdus[i]; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // API level 23 以后 messages[i] = SmsMessage.createFromPdu(pdu, format); } else { messages[i] = SmsMessage.createFromPdu(pdu); } } // 解析完内容后分析具体参数 for (SmsMessage msg : messages) { // 获取短信内容 String sms = msg.getMessageBody(); // 获取短信号码 String number = msg.getOriginatingAddress(); } } } }}
修改AndroidManifest.xml
- 需要添加获取短信的权限;
<uses-permission android:name="android.permission.READ_SMS" /><uses-permission android:name="android.permission.RECEIVE_SMS" />
- 注册你的receiver;
priority
为优先级,设置为1000
,这样系统将优先处理你的receiver;
<receiver android:name=".receiver.SMSReceiver"> <intent-filter android:priority="1000"> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver>
总结
- 拦截短息需要用到Android 组件 Broadcast Receiver;
- 需要从
pdus
解析短息内容; - 需要在AndroidManifest.xml中注册receiver,并写上相应的权限;
0 0
- Android短信窃听器短信拦截
- Android拦截短信,接收短信
- Android 拦截短信配置
- android短信拦截
- Android 拦截短信配置
- android短信拦截
- Android-拦截接收短信
- 关于Android短信拦截
- android 短信拦截思路
- Android短信拦截
- android短信拦截
- android短信拦截优先级
- Android短信拦截
- android拦截短信
- android短信拦截
- Android短信拦截
- android拦截短信
- Android短信拦截
- Xcode export/upload error: Your session has expired. Please log in
- 并发
- uboot 移植
- iOS 视图,动画渲染机制探究
- 下载SVN上的源代码?
- Android 拦截短信
- c++工厂模式和c++工厂方法
- 百练3865:肿瘤检测
- Angular的启动方式
- FTxxxx系列------系统通过属性获取virtualkey
- shell脚本比较运算符及逻辑运算符小结
- Android安全输入设计与思考,android设计思考 为什么使用安全键盘? 安全的输入 各大公司的安全键盘设计 开始自定义安全键盘 安全键盘还需要注意的
- sizeof与strlen的区别和不同
- Mesosphere DCOS安装