最近开始学习安卓,要做一个可以监听手机短信的内容,做个笔记,方便以后查看

有两种方式:

方式一:通过广播监听短信信息
注册一个广播接收器

<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. 安卓开发系列 之如何获取手机短信内容

    1 手机中短信数据库相关字段包括: _id:短信序号,如100 address:发件人地址,即手机号,如+8613811810000,这里需要注意的是手机号是否加+86,可以加上86和不加86分别测试 ...

  2. android获取手机短信记录,android 获取手机电话号码和短信内容

    通过ContentResolver 获取到手机的联系人跟手机短信信息并显示出来. 1.实现的代码: package com.example.phone; import java.text.Simple ...

  3. Total Control脚本功能JS API之获取设备短信内容

    每一个设备对象都对应了 Total Control 中已连接的一台手机设备. 通过设备对象,用户可以获取到手机设备的各种属性,以及使用控制接口对设备进行各种操作,比如 打开或关闭指定APP,发送短信等 ...

  4. Android开发 亲测可用--多种方式获取手机短信验证码自动填入

    Android开发 静态注册.动态注册.短信中心库监控获取手机验证码,自动复制到剪切板或或填入输入框. 友情提醒初学者:这是广播接收器的类,写在xml中静态注册或写在启动类的Oncreate方法下动态 ...

  5. JavaScript 通过plus读取android手机短信内容

    JavaScript 通过plus读取android手机短信内容. 1.获取android权限 在HBuilder工程中双击应用的"manifest.json"文件,切换到&quo ...

  6. atitit 破解 拦截 绕过 网站 手机 短信 验证码 之自动获取手机短信方式 attilax 总结

    atitit.破解  拦截 绕过 网站 手机 短信 验证码 之自动获取手机短信方式 attilax 总结 1. 自动获取手机短信方式的原理 1 2. 调用api 1 3. ----核心代码 2 4.  ...

  7. android短信显示内容,Android获取手机短信SMS收件箱内容

    Android中读取的短信方式(短信区域),具体有如下几种方式: /** * 所有的短信 */ public static final String SMS_URI_ALL = "conte ...

  8. java代码进行短信接收_自动化测试-自动获取手机短信验证码

    最近在做生产环境自动化测试,碰到一个难题就是短信验证码的获取,生产环境短信验证码是真实的,不能采用测试环境将短信验证码写成固定的方法解决,我的思路是:做一个apk小程序,将手机上的短信验证码实时读取出 ...

  9. python自动读取短信_自动化测试-自动获取手机短信验证码

    最近在做生产环境自动化测试,碰到一个难题就是短信验证码的获取,生产环境短信验证码是真实的,不能采用测试环境将短信验证码写成固定的方法解决,我的思路是:做一个apk小程序,将手机上的短信验证码实时读取出 ...

最新文章

  1. nginx配置一、二级域名、多域名对应(api接口、前端网站、后台管理网站)
  2. Vim设置括号自动补全和快速跳出
  3. 初学者选黑卡还是微单_入门单反和微单相机该买哪个
  4. [react-native]react-native填坑笔记
  5. 分享:skalibs 1.3.0 发布,低级的 C 程序库
  6. 计算机CG技术未来发展前景,CG就业前景怎么样?
  7. JS - javascript容错处理代码
  8. Sevlet相关 摘抄笔记
  9. 3dmax软件怎样一键取消视图背景网格
  10. mybatis基础(上)
  11. td-agent windows 安装步骤
  12. 生活大爆炸第四季 那些精妙的台词翻译
  13. 通过opencv标记图片以及写入Excel小方法
  14. 新一代开源免费的轻量级 SSH 终端,非常炫酷好用
  15. android手机内存使用情况分析
  16. 【UI设计】产品设计之UI设计规范
  17. linux安装mysql centos_Linux CentOS安装Mysql
  18. 8种食品,塑身美体过程中的你不要空腹食用
  19. STM32开发实例 基于STM32单片机的室外环境监测系统
  20. 基于雷电模拟器的python脚本(乱斗西游2自动收礼包)

热门文章

  1. 计算机二级Web考试真题题库 上机考试系统 大纲教材 考试课程 讲解视频
  2. 金融交易报文ISO8583协议
  3. spring boot 访问路径404是会转到/error路径,倒是拦截器失效
  4. 科学计算法(机器学习)----决策树定义以相关概念
  5. 2019 Google Developder Days(GDD)
  6. 关于启动 vue 项目出现 98% after emitting CopyPlugin 的解决方法!
  7. python+matplotlib对柿子图的彩色和灰色直方图统计
  8. 浅析专题中的构图之美
  9. 对鸿蒙操作系统和AI Camera Hi3516dDV300 开发过程的记录和理解
  10. Error -27796: Failed to connect to server ip地址: [10060] Connection timed out