Android开发之监听或获取手机短信内容
最近开始学习安卓,要做一个可以监听手机短信的内容,做个笔记,方便以后查看
有两种方式:
方式一:通过广播监听短信信息
注册一个广播接收器
<receiver android:name="接收器包名"><intent-filter android:priority="优先级"><action android:name="android.provider.Telephony.SMS_RECEIVED" /></intent-filter>
</receiver>
要监听系统短息信息肯定需要权限,加入权限
<uses-permission android:name="android.permission.RECEIVE_SMS" /> <!-- 接收短信权限 -->
<uses-permission android:name="android.permission.READ_SMS" /> <!-- 读取短信权限 -->
public class CommandReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {
// ToastUtil.shortToast(context, "hahhahahahh");//pdus短信单位pdu//解析短信内容Object[] pdus = (Object[]) intent.getExtras().get("pdus");for (Object pdu : pdus) {//封装短信参数的对象SmsMessage sms = SmsMessage.createFromPdu((byte[]) pdu);String number = sms.getOriginatingAddress();String body = sms.getMessageBody();//写自己的处理逻辑}}
}
此处广播为有序广播,你可以设置优先级,可以在接收到此广播之后,可以删除它abortBroadcast(); 亲测在AS中加上优先级之后,就不起作用了。
方法二:通过短信数据库获取短信
——————可以根据自已的需求查询短信数据库
public class SMSContentObserver extends ContentObserver {private static final int MSG_INBOX = 1;private Context mContext;private Handler mHandler; // 更新UIpublic SMSContentObserver(Context mContext,Handler mHandler) {super(mHandler); // 所有ContentObserver的派生类都需要调用该构造方法this.mContext = mContext;this.mHandler = mHandler;}/*** 当观察到的Uri发生变化时,回调该方法去处理。所有ContentObserver的派生类都需要重载该方法去处理逻辑* selfChange:回调后,其值一般为false,该参数意义不大*/@Overridepublic void onChange(boolean selfChange) {// TODO Auto-generated method stubsuper.onChange(selfChange);mHandler.obtainMessage(MSG_INBOX, "收到了短信!!!").sendToTarget();}
}
初始化观察者
我这添加了一个Activity
public class MainActivity extends AppCompatActivity {private SMSContentObserver smsContentObserver;protected static final int MSG_INBOX = 1;private Handler mHandler = new Handler() {public void handleMessage(Message msg) {switch (msg.what) {case MSG_INBOX:setSmsCode();break;}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);smsContentObserver = new SMSContentObserver(MainActivity.this, mHandler);}private void setSmsCode() {Log.i("zhang", "收到短信了!");
// login_et_sms_code.setText("hahhaha");Cursor cursor = null;// 添加异常捕捉try {cursor = getContentResolver().query(Uri.parse("content://sms"),new String[] { "_id", "address", "body", "date" },null, null, "date desc"); //if (cursor != null) {String body = "";while (cursor.moveToNext()) {body = cursor.getString(cursor.getColumnIndex("body"));// 在这里获取短信信息//-----------------写自己的逻辑}} catch (Exception e) {e.printStackTrace();} finally {if (cursor != null) {cursor.close();}}}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();if (smsContentObserver != null) {getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, smsContentObserver);// 注册监听短信数据库的变化}}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();if (smsContentObserver != null) {getContentResolver().unregisterContentObserver(smsContentObserver);// 取消监听短信数据库的变化}}
}
// strColumnName=_id strColumnValue=48 //短消息序号
// strColumnName=thread_id strColumnValue=16 //对话的序号(conversation)
// strColumnName=address strColumnValue=+8613411884805 //发件人地址,手机号
// strColumnName=person strColumnValue=null //发件人,返回一个数字就是联系人列表里的序号,陌生人为null
// strColumnName=date strColumnValue=1256539465022 //日期 long型,想得到具体日期自己转换吧!
// strColumnName=protocol strColumnValue=0 //协议
// strColumnName=read strColumnValue=1 //是否阅读
// strColumnName=status strColumnValue=-1 //状态
// strColumnName=type strColumnValue=1 //类型 1是接收到的,2是发出的
// strColumnName=reply_path_present strColumnValue=0 //
// strColumnName=subject strColumnValue=null //主题
// strColumnName=body strColumnValue=您好 //短消息内容
// strColumnName=service_center strColumnValue=+8613800755500 //短信服务中心号码编号,这个不需要UI,直接通过模拟器直接发送短信进行测试---
Android开发之监听或获取手机短信内容相关推荐
- 安卓开发系列 之如何获取手机短信内容
1 手机中短信数据库相关字段包括: _id:短信序号,如100 address:发件人地址,即手机号,如+8613811810000,这里需要注意的是手机号是否加+86,可以加上86和不加86分别测试 ...
- android获取手机短信记录,android 获取手机电话号码和短信内容
通过ContentResolver 获取到手机的联系人跟手机短信信息并显示出来. 1.实现的代码: package com.example.phone; import java.text.Simple ...
- Total Control脚本功能JS API之获取设备短信内容
每一个设备对象都对应了 Total Control 中已连接的一台手机设备. 通过设备对象,用户可以获取到手机设备的各种属性,以及使用控制接口对设备进行各种操作,比如 打开或关闭指定APP,发送短信等 ...
- Android开发 亲测可用--多种方式获取手机短信验证码自动填入
Android开发 静态注册.动态注册.短信中心库监控获取手机验证码,自动复制到剪切板或或填入输入框. 友情提醒初学者:这是广播接收器的类,写在xml中静态注册或写在启动类的Oncreate方法下动态 ...
- JavaScript 通过plus读取android手机短信内容
JavaScript 通过plus读取android手机短信内容. 1.获取android权限 在HBuilder工程中双击应用的"manifest.json"文件,切换到&quo ...
- atitit 破解 拦截 绕过 网站 手机 短信 验证码 之自动获取手机短信方式 attilax 总结
atitit.破解 拦截 绕过 网站 手机 短信 验证码 之自动获取手机短信方式 attilax 总结 1. 自动获取手机短信方式的原理 1 2. 调用api 1 3. ----核心代码 2 4. ...
- android短信显示内容,Android获取手机短信SMS收件箱内容
Android中读取的短信方式(短信区域),具体有如下几种方式: /** * 所有的短信 */ public static final String SMS_URI_ALL = "conte ...
- java代码进行短信接收_自动化测试-自动获取手机短信验证码
最近在做生产环境自动化测试,碰到一个难题就是短信验证码的获取,生产环境短信验证码是真实的,不能采用测试环境将短信验证码写成固定的方法解决,我的思路是:做一个apk小程序,将手机上的短信验证码实时读取出 ...
- python自动读取短信_自动化测试-自动获取手机短信验证码
最近在做生产环境自动化测试,碰到一个难题就是短信验证码的获取,生产环境短信验证码是真实的,不能采用测试环境将短信验证码写成固定的方法解决,我的思路是:做一个apk小程序,将手机上的短信验证码实时读取出 ...
最新文章
- nginx配置一、二级域名、多域名对应(api接口、前端网站、后台管理网站)
- Vim设置括号自动补全和快速跳出
- 初学者选黑卡还是微单_入门单反和微单相机该买哪个
- [react-native]react-native填坑笔记
- 分享:skalibs 1.3.0 发布,低级的 C 程序库
- 计算机CG技术未来发展前景,CG就业前景怎么样?
- JS - javascript容错处理代码
- Sevlet相关 摘抄笔记
- 3dmax软件怎样一键取消视图背景网格
- mybatis基础(上)
- td-agent windows 安装步骤
- 生活大爆炸第四季 那些精妙的台词翻译
- 通过opencv标记图片以及写入Excel小方法
- 新一代开源免费的轻量级 SSH 终端,非常炫酷好用
- android手机内存使用情况分析
- 【UI设计】产品设计之UI设计规范
- linux安装mysql centos_Linux CentOS安装Mysql
- 8种食品,塑身美体过程中的你不要空腹食用
- STM32开发实例 基于STM32单片机的室外环境监测系统
- 基于雷电模拟器的python脚本(乱斗西游2自动收礼包)
热门文章
- 计算机二级Web考试真题题库 上机考试系统 大纲教材 考试课程 讲解视频
- 金融交易报文ISO8583协议
- spring boot 访问路径404是会转到/error路径,倒是拦截器失效
- 科学计算法(机器学习)----决策树定义以相关概念
- 2019 Google Developder Days(GDD)
- 关于启动 vue 项目出现 98% after emitting CopyPlugin 的解决方法!
- python+matplotlib对柿子图的彩色和灰色直方图统计
- 浅析专题中的构图之美
- 对鸿蒙操作系统和AI Camera Hi3516dDV300 开发过程的记录和理解
- Error -27796: Failed to connect to server ip地址: [10060] Connection timed out