Android短信会话(查看会话记录以及会话详情界面)---短信管家3看一下上一篇,其实是有缺陷的,我们在载入联系
Android短信会话(查看会话记录以及会话详情界面)---短信管家3
看一下上一篇,其实是有缺陷的,我们在载入联系人的时候是放在主线程中做的(比较耗时),所以界面会卡住。推荐使用异步查询来解决
这一篇我们谈短信会话:
首先看一下效果图

这个是所有会话的列表(区分有头像和没有头像的,联系人没有头像的就暂时不显示图片,有头像则显示头像)
点击一个会话则进入详细会话页面:

这两个页面开发,主要是通过查找android的 mmssms.db这个数据库的结果
看看android底层数据的实现,了解下原理吧。
这个数据库的路径是在:/data/data下的 com.android.provider.telephony目录下
打开数据库:

里面有21张表,我们不需要所有表,这里我们需要使用到的表是: canonical_addresses threads sms这三张表。
多表查询比较麻烦,这里我就直接贴上来了:
我们查询的时候首先通过电话号码可以从表canonical_addresses拿到_id,这个id和threads表中的 _id是一样的 ,我们到threads中可以查到相关会话信息(也就是第一个页面所需要的信息)
跟据这个id也可以到sms表中拿到所有的与该电话关联的所有会话记录(就是第二个页面)//这里我们为什么不直接用电话号码去拿。细心的朋友会发现同一个联系人电话号码有的是 13512345678 有的是 +8613512345678,所以操作起来会比较麻烦
哦了,原理我们就先理解到这里了,然后该做啥了呢。关于这些信息,系统都封装成了内容提供者来供我们调用了,所以,就好弄了哦。
下面看一下具体实现吧:
老规矩,先把页面给大家哦:
第一个页面:
package com.xiaoxu.message.bean;/** * 消息实体类 * * @author Administrator * */public class DetailEntity{// 短信联系人private String name;// 短信日期private String date;// 短信内容private String text;// 布局IDprivate int layoutID;public String getName(){return name;}public void setName(String name){this.name = name;}public String getDate(){return date;}public void setDate(String date){this.date = date;}public String getText(){return text;}public void setText(String text){this.text = text;}public int getLayoutID(){return layoutID;}public void setLayoutID(int layoutID){this.layoutID = layoutID;}public DetailEntity(){}public DetailEntity(String name, String date, String text, int layoutID){super();this.name = name;this.date = date;this.text = text;this.layoutID = layoutID;}}最后,大家是否发现,这个页面和上一个页面都有使用到发送短信,注册广播接收回执,等等一些内容,那我们要对他们进行一下优化,不能在每个页面里都要写的话,那工作量实在就太大了,下一篇博文会介绍下如何去优化
