这几天在弄短信的东东,主要是想做一个用户使用短信支付的接口,殊不知国内省份不一样,接口众多呀!感叹国家地域的辽阔和房价的高不可攀的矛盾。。。。

接口不是重点,重点是关于获取接受短信的消息,当然最熟悉的还是BroadcastReceiver来监听,这是一般的模式,网上一大把!

其实还有另一种方式,就是观察者模式(其实说是监听更好理解一些),无非是观察(或者说是监听)短信的数据库的变化!这个在android上是支持的,但是要声明获取权限

<uses-permission android:name="android.permission.READ_SMS"/><uses-permission android:name="android.permission.WRITE_SMS"/>

下面要做的就是自定义一个观察类,声明它观察的事件

/*** 监听数据库内容改变,根据具体的号码来删除短信*/private class SMSContent extends ContentObserver{private Cursor cursor = null;public SMSContent(Handler handler){super(handler);// TODO Auto-generated constructor stub}/* (non-Javadoc)* @see android.database.ContentObserver#onChange(boolean)*/@Overridepublic void onChange(boolean selfChange){// TODO Auto-generated method stubsuper.onChange(selfChange);System.out.println("Change...");/*** 数据库查询,具体各个字段的表示的含义下面有解释*/cursor = managedQuery(Uri.parse("content://sms/inbox"), new String[]{"_id", "address", "read"}, "address=? and read=?", new String[]{"125201510100x00y", "0"}, "date desc");if(cursor != null){System.out.println(cursor.getCount());;ContentValues values = new ContentValues();values.put("read", 1);cursor.moveToFirst();while(cursor.isLast()){System.out.println(cursor.getString(1));getContentResolver().update(Uri.parse("content://sms/inbox"), values, "_id=?", new String[]{"" + cursor.getInt(0)});cursor.moveToNext();}}}}

这个观察类很简单,就是在onChange()方法中写好要过滤到的数据条目(也就是短信)我这里是判断的是来自1252015101006007,并且“未读”(read=0)的短信,我的初衷是将收到的符合上述类型的短信标记为“已读”,可是最后却不能成功,因为我的手机刷的是小米的系统,系统做了深度定制,比较系统的优先级要大于你程序的优先级,所以系统会先处理你收到短信的消息,但是你确实是也可以收到短信的消息的,这个很重要(因为有些省份的短信扣费需要二次确认,所以你要监听你第二条短信收到的消息)。

在任何你想要用到这个观察类的地方,实例化,注册,就ok了。

SMSContent smsContent = new SMSContent(new Handler());//注册短信数据库修改监听getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, smsContent);

短信数据库中各字段的含义总结如下:

_id:自增的唯一ID,主键

thread_id:同一号码的短信这个值是相同的

address:发送者的号码

person:发送者在你通讯录中的标记

read:未读和已读(0未读,1已读,上面的例子用到了)

date:日期

status:有4种(发送成功,失败,发送中)

type:收到或者发送的(1收到的,2发送的)

body:短信内容

这个总结网上很多,当然也可以下载一个SQLite Brower自己来看!

PS:我认为小米系统是不能拦截到短信的,不知道高手们有什么高招,望指点!

android 短信管理(获取接受到短信的消息)相关推荐

  1. 通达信插件获取并存储通达信商品指数的实时数据

    一.引子 通达信商品指数一共有23个,如下图所示: 如果想获取历史数据,只需要通过通达信的数据下载和导出功能即可,现在我们需要获取这23个指数的实时数据,通过导出功能就没有办法了. 在最初的阶段,考虑 ...

  2. android通讯录管理(获取联系人,通话记录,短信消息),Android通讯录管理(获取联系人、通话记录、短信消息)(二)...

    Android通讯录管理(获取联系人.通话记录.短信消息)(二) 前言:上一篇博客介绍的是获取联系人的实现,本篇博客将介绍通话记录的实现. 界面布局: /Contact_Demo/res/layout ...

  3. android 短信位置,浅析Android手机卫士之手机实现短信指令获取位置

    推荐阅读: 获取位置 新建一个service的包 新建一个GPSService类继承系统的Service类 清单文件中注册一下 重写onCreate()方法,服务创建的时候回调 重写onDestroy ...

  4. android 4.0版本手机接受多条短信分析

    手机接受多条短信分析 1. 空闲中整理下笔记,先上android 4.0 短信接收多条异常问题处理,再写 android 4.5 的.  实例:android4.0版本以及以前版本 [信息]对比机发送 ...

  5. Android App 可以定时启动! 并且完成短信自动发送获取内容功能 (以获取闪讯密码为例 大学宿舍宽带)

    接上一篇:android 发送短信sendTextMessage()真机运行报错,退出,在已申请SEND_SMS权限的情况下Android send SMS not working uid ... 重 ...

  6. Android App 可以定时启动! 并且完成短信自动发送获取内容功能 (以获取闪讯密码为例 大学宿舍宽带)

    接上一篇:android 发送短信sendTextMessage()真机运行报错,退出,在已申请SEND_SMS权限的情况下Android send SMS not working uid ... 重 ...

  7. android短信发送和接受

    短信发送 发短信第一件事是在manifest文件中添加权限 <uses-permission android:name="android.permission.SEND_SMS&quo ...

  8. android通话记录列表apk,android打电话,发短信,获取通讯录、通话记录、短信记录...

    [实例简介] 代码实现android打电话,发短信,获取通讯录.通话记录.短信记录 [实例截图] [核心代码] 19287b5f-b70c-4210-ab04-9d24ddd60788 └── cal ...

  9. android 获取短信消息,Android开发获取短信的内容并截取短信

    Android 首先我们要写一个广播接收器,当我们的手机收到短信时,系统会自动发送一个广播,我们只需要接收到这条广播就可以了 在广播里面,我们重写的onReceive()方法,通过里面的Intent写 ...

最新文章

  1. 微生物组-宏基因组分析第8期(报名直播课免费参加线下2020.7)
  2. maven打包导入本地jar包
  3. Linux环境下安装OpenOffice 4.1.8
  4. 20211018 一些特殊矩阵
  5. hadoop的关键进程
  6. IPv4数据报格式及其语义
  7. 网易云音乐评论催泪刷屏?我用Python抓取了1008328条热评告诉你为什么!
  8. c语言sort函数排序二维数组,关于C++ 的 sort 对二维数组排序。该如何解决
  9. codeblocks中文编码问题
  10. php3.2接口分页,thinkphp3.2.3分页完整实例
  11. 简单内网***刺探命令
  12. 时间对象与字符串对象之间相互转换
  13. php 并发出站,PHP控制站点并发
  14. 手机之家签名工具_IOS签名工具:魔力签
  15. matlab 康托尔集,【德国数学康托尔构造的这个图形叫分形,称做康托尔集.从长度为1的...-康托尔-谭榷刨同学...
  16. html调整中文文字间距,HTML 中调整文字间距,行间距和文字竖排
  17. 简述html的文档基本结构,【简答题】简述 HTML 文档的基本结构。
  18. win10家庭版(阉割版)打开远程桌面服务
  19. 高通SDX62平台 MBIM搜网、查询信号等功能异常
  20. 所见即所得的 markdown 编辑器:Typora

热门文章

  1. 基本的Dos命令(命令行盘符切换)
  2. 禁止 mysql nobody_Warning: mysql_real_escape_string(): Access denied for user 'nobody'@'localhost'
  3. GitHub 设置和取消代理,加速 git clone
  4. 【DEVOPS】基于禅道 - 重构研发协作流程
  5. POSIX是什么,为什么需要POSIX
  6. 评职称自费出书需要多长时间
  7. 基于工厂智能化改造——数字孪生映射应用案例解析
  8. 关于SG/SP, GG/GP的一点个人理解
  9. Pillow图像处理(PIL.Image类的详细使用)
  10. Linux:命令gedit主要作用是什么?