Android 短信会话相关

Android 之 sms 短信 概述 SMS(Short Messaging Service), 即我们经常使用的短信服务。它是一种存储和转发服务。也就是说,短消息并不是直接从发送人发送到接收人,而始终通过 SMS 中心进行转发的。如果接收人处于未连接状态(可能电话已关闭),则消息将在接收人再次连接时发送。 阅读详情

想要获取某一会话的所有短信,你首先得了解android系统存储短信的结构,网上有很多介绍

sms主要结构: 

 
  1. _id => 短消息序号 如100  
  2. thread_id => 对话的序号 如100  
  3. address => 发件人地址,手机号.如+8613811810000  
  4. person => 发件人,返回一个数字就是联系人列表里的序号,陌生人为null  
  5. date => 日期  long型。如1256539465022  
  6. protocol => 协议 0 SMS_RPOTO, 1 MMS_PROTO   
  7. read => 是否阅读 0未读, 1已读   
  8. status => 状态 -1接收,0 complete, 64 pending, 128 failed   
  9. type => 类型 1是接收到的,2是已发出  (6是等待发送) 
  10. body => 短消息内容   
  11. service_center => 短信服务中心号码编号。如+8613800755500  

 

看到第二项,很明显,想要获取某一会话的所有信息,必须先得到thread_id这个东西才行

那我们就先写一个获取thread_id的函数吧,传入参数是会话中,对方的电话号码

 

  
  1.  /** 
  2.  * 全局变量 
  3.  */ 
  4. final String SMS_URI_ALL = "content://sms/"; 
  5. final String SMS_URI_INBOX = "content://sms/inbox"; 
  6. final String SMS_URI_SEND = "content://sms/sent"; 
  7. final String SMS_URI_DRAFT = "content://sms/draft"; 
  8. final Uri URI = Uri.parse(SMS_URI_ALL); 
  9. final String ADDRESS = "address"; 
  10. final String THREAD_ID = "thread_id"; 

函数体

  
  1. int getThreadId(String number) { 
  2.     int threadId=0; 
  3.     //根据电话号码去搜索 
  4.     ContentResolver cr = context.getContentResolver(); 
  5.     String[] projection = new String[] { THREAD_ID, ADDRESS }; 
  6.  
  7.     Cursor cur = cr.query(URI, projection, ADDRESS + " = ?", 
  8.             new String[] { number }, null);// asc 
  9.  
  10.     int threadIdColumn = cur.getColumnIndex(THREAD_ID); 
  11.     if (cur != null) { 
  12.  
  13.         while (cur.moveToNext()) { 
  14.             //获得会话的thread_id 
  15.             threadId = cur.getInt(threadIdColumn); 
  16.             Log.v("smsLog", "thread id=" + threadId); 
  17.         } 
  18.         cur.close(); 
  19.     } 
  20.  
  21.     return threadId; 
  22.  
  23. } 

然后是根据该thread_id去搜索所有短信

函数体

 

   
  1. public List<SmsLogList> getSmsInPhone(String number) { 
  2.         int thread_id = getThreadId(number); 
  3.         sms_list = new ArrayList<SmsLogList>(); 
  4. //获得短信_id 号码 人名 短信内容 时间 和 类型
  5.         String[] projection = new String[] { "_id", ADDRESS, "person", "body", 
  6.                 "date", "type" }; 
  7.         ContentResolver cr = context.getContentResolver(); 
  8.         Cursor cur = cr.query(URI, projection, THREAD_ID + " = ?", 
  9.                 new String[] { Integer.toString(thread_id) }, "date desc"); 
  10.  
  11.         int nameFieldColumnIndex = cur.getColumnIndex("person"); 
  12.         int numberFieldColumnIndex = cur.getColumnIndex(ADDRESS); 
  13.         int smsbodyColumn = cur.getColumnIndex("body"); 
  14.         int dateColumn = cur.getColumnIndex("date"); 
  15.         int typeColumn = cur.getColumnIndex("type"); 
  16.         if (cur != null) { 
  17.  
  18.             while (cur.moveToNext()) { 
  19.                 SmsLogList smsLogList = new SmsLogList(); 
  20.                 smsLogList.setName(cur.getString(nameFieldColumnIndex)); 
  21.                 smsLogList 
  22.                         .setPhoneNumber(cur.getString(numberFieldColumnIndex)); 
  23.                 smsLogList.setSmsbody(cur.getString(smsbodyColumn)); 
  24.                 smsLogList.setDate(cur.getLong(dateColumn)); 
  25.                 smsLogList.setType(cur.getString(typeColumn)); 
  26.                 Log.v("smsLog", "setType=" + cur.getString(typeColumn) + "  " 
  27.                         + number); 
  28.                 sms_list.add(smsLogList); 
  29.             } 
  30.             cur.close(); 
  31.         } 
  32.         return sms_list; 
  33.     } 

SmsLogList 是一个类,封装了短信的内容,你们可以自己建一个

返回的list就是该号码的所有会话了

本文出自 “jpG吃掉nova” 博客,请务必保留此出处http://jpg8nova.blog.51cto.com/4647971/988814

 

 

SmsLogList:

 

	private String name;
	private String PhoneNumber;
	private String smsbody;
	private long date;
	private String type;

//并实现GET、SET方法


 

 

以下是短信会话的相关博文地址:

http://blog.youkuaiyun.com/actual_/article/details/8060143 含彩信

http://blog.youkuaiyun.com/etzmico/article/details/6921450 短信管理的相关协议

http://www.linuxidc.com/Linux/2011-12/49588.htm 短信列表

【Android】短信应用——短信信息实时获取 我们知道,只需通过代码就可以读到收件箱中的短信,发件箱中的短信;但是却没办法在短信发来的瞬间获取;如果我们在短信发来的一瞬间能得到相应的信息内容,那么我们就可以依次来展开很多应用了——也就是通过短信去远程操作一部手机。   如果想实时获取,就需要调用receiver了,写一个监听类,这样我们就可以实时获取短息信息了。   预览图:     还是来看看代码吧。     首先, 阅读详情

相关推荐

安卓短信自动化转发至微信实现教程

在快节奏的现代生活中,人们越来越倾向于使用即时通讯工具来交流,微信作为其中的佼佼者,已成为多数人的首选。然而,在某些情况下,例如商务沟通或紧急通知,我们仍然会收到重要的短信信息。因此,将短信内容自动转发到微信的解决方案应运而生,旨在为用户提供更为便捷的信息处理方式。实现短信转微信功能,需要在安卓手机上借助强大的自动化工具Tasker。Tasker不仅能够监听和处理短信,还能调用微信API,实现消息的自动转发。

weixin_30798867的博客 3482

android学习日记(一) 获取某一会话的所有短信

---------------------昏割线---------------------- 12月07号新增一种方法 ------------------------------------------------- 想要读取一个会话的所有信息,千言万语就是要获得thread_id,所以下面增加两种获取thread_id的方法 1.向数据库插入一条空的短信,就...

weixin_33786077的博客 194

【Android】短信应用——短信(会话)实时删除

【Android】短信应用——短信(会话)实时删除Demo 相关文章:http://blog.youkuaiyun.com/etzmico/article/details/7077358

Android的基本常用的短信操作

1、调用系统发送短信界面(传入手机号码+短信内容) 2、隐藏发送短信(指定号码指定内容)(这里隐藏只是没有反写入数据库) 3、获得收件箱接收到的短信 4、Android屏蔽新短信通知提示信息:(ContentObserver) 4、删除刚接收到的短信: A)、带提示删除 B)、无新短信通知=删除短信 所用到的相关数...

jykenan的专栏 200

保姆级教程:Windows下用GDC-Client下载TCGA数据,从环境变量配置到成功下载

本文提供Windows平台下使用GDC-Client下载TCGA数据的完整教程,从环境变量配置到成功下载。详细介绍了GDC-Client工具的安装、系统环境变量设置、配置文件优化以及数据下载实战技巧,帮助生物信息学研究者高效获取TCGA数据库中的癌症基因组数据。

weixin_42520025的博客 403

Cadence IC618与Spectre231安装配置全攻略:License、环境变量与依赖检查

EDA工具部署中,License管理与环境变量隔离是核心难点。FlexLM作为通用授权机制,通过守护进程和端口配置实现工具授权;环境变量则控制工具路径与库加载顺序,避免版本冲突。合理配置可确保IC618与Spectre231稳定运行,提升仿真效率。典型应用场景包括模拟IC设计、高校实验室及企业级EDA环境。本文聚焦Cadence IC618与Spectre231的安装实践,详解License配置、环境隔离及依赖检查,助你快速搭建可靠设计环境。

weixin_28721917的博客 325

Android 获取短信会话信息 .

Android 手机信息存放在mmssms.db数据库。 短讯息主要用到sms表和threads表。 查看其表结构 sms表,信息表 threads表 1.mesage_count该会话的消息数量 2.recipient_ids为联系人ID,这个ID不是联系人表中的_id,而是指向表canonical_address里的id, canonical_address这个表同样位于

u010482217的专栏 825

多期DID实战指南:从CSDID原理到分组加权策略

本文深入解析多期DID(CSDID方法)在政策评估中的实战应用,从核心思想到分组加权策略全面讲解。通过电商扶贫等案例,详细演示如何正确处理分批实施政策的数据分析,包括分组拆解、子模块DID操作及加权平均选择,帮助研究者规避常见误区,提升政策评估的准确性。

weixin_26833503的博客 524

关于Android中获取短信息会话(threads)表中的信息

欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I

tuying_001的专栏 2131

CLIP-Count代码配置以及踩坑记录

CLIP-Count代码配置以及踩坑记录

学术菜鸡 1011

ABAP 7.40 新语法介绍系列之二 - ABAP 类型转换操作符 CONV

这个lv_input_s变量的唯一使命,就是接收来自 char10 类型的 lv_input_c 变量的值,然后传递到 print 方法里去。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1418

Android短信会话(查看会话记录以及会话详情界面)---短信管家3

看一下上一篇,其实是有缺陷的,我们在载入联系人的时候是放在主线程中做的(比较耗时),所以界面会卡住。推荐使用异步查询来解决 这一篇我们谈短信会话: 首先看一下效果图 这个是所有会话的列表(区分有头像和没有头像的,联系人没有头像的就暂时不显示图片,有头像则显示头像) 点击一个会话则进入详细会话页面: 这两个页面开发,主要是通过查找android的 mmssm

桃花源 4478

【从零开始入门unity游戏开发之——C#篇01】理论开篇,理解什么是编程

理论开篇,理解什么是编程

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 3112

Android短信功能实现源码

一段完整的Android平台上短信功能的接口源码,利用扩展的API可以通过js实现如下功能: 1. getContentUris():读取短信相关的所有数据库表的Uri地址; 2. get(int number):读取若干条短信; 3. getUnread(int number):读取若干条未读短信; 4. getRead(int number):读取若干条已读短信; 5. g...

紫色幽灵工作室 374

Nvidia Orin Driveos Camera 介绍及调试详解

自动驾驶-nvidia orin driveos Camera 驱动详解及调试

u011803281的博客 2992

Hermes Agent 常见报错排查与问题解决

Hermes Agent 常见报错排查指南 摘要 本文全面梳理了 Hermes Agent 使用过程中的10类常见报错,按阶段划分为安装期、运行期认证类、后端基础设施类和长任务执行类四大类,并提供了系统化的排查流程: 安装期问题:包括命令未找到和Python版本不兼容,主要检查PATH环境和Python版本是否符合要求 认证类问题:涉及API Key认证失败和速率限制,需要验证密钥配置和配额状态 基础设施问题:包含Docker报错、MCP连接失败和OAuth令牌过期,需检查相关服务状态 执行类问题:主要是上

简简单单Onlinezuozuo 1345

Android - 小功能 - Android短信功能实现源码

一段完整的Android平台上短信功能的接口源码,利用扩展的API可以通过js实现如下功能: 1. getContentUris():读取短信相关的所有数据库表的Uri地址; 2. get(int number):读取若干条短信; 3. getUnread(int number):读取若干条未读短信; 4. getRead(int number):读取若干条已读短信;

PuddingGuo 1169

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Android短消息用到的常量定义

package com.tarena.youlu.constant;import android.net.Uri;public class Constant { public static final String PEOPLE_URI = "content://contacts/people/"; /** * 获取短信会话相关内容的Uri */ publ

MaxPanda的博客 583

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android短信数据库相关

Android短信数据库相关

VVel1996的博客 1090

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

短信看过就删掉不存入收件箱

ContentResolver cr = _context.getContentResolver();    Uri inbox = Uri.parse( "content://sms/inbox" );    Cursor cursor = cr.query(         inbox,         new String[] { "_id", "thread_id", "bod...

点点滴滴 168

监听短信增删以及短信会话增删

网上找了许久,才找到会话增删监听的uri与短信不一样,如下: resolver.registerContentObserver(Uri.parse("content://sms"), true,observer); resolver.registerContentObserver(Uri.parse("content://mms-sms"), true, observer); 转...

weixin_33759269的博客 123

mms模块结构

mms模块结构

will的成长之路 3350

把安卓手机当作短信猫的三款ANDROID应用

把安卓手机当作短信猫,性能稳定,管理方便,最近研究了一下相关的ANDROID短信猫应用,推荐一下三款:虫虫云猫,SMSSync,中文版SMS Gateway,下面做分别做介绍。 1、虫虫云猫: 收到短信后,接收到短信后,立刻转发到网站;主动定时从网络请求页面,获取待发短信列表,然后发出短信;发出短信的状态给予报告更新到网站,可方便控制哪些没有发送成功,需要重发。 缺点:作者好久没更新了,我用

DORIS1BRUCE的专栏 3542
上一篇: Android R文件丢失问题
下一篇: Android 获取通话记录
join_wangzi
博客等级 码龄15年 37粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值