获取手机短信会话信息 Android
来源:互联网 发布:淘宝怎么天天特价 编辑:程序博客网 时间:2024/04/30 21:43
Android 手机信息存放在mmssms.db数据库。
短讯息主要用到sms表和threads表。
查看其表结构
sms表,信息表
threads表
1.mesage_count该会话的消息数量
2.recipient_ids为联系人ID,这个ID不是联系人表中的_id,而是指向表canonical_address里的id,
canonical_address这个表同样位于mmssms.db,它映射了recipient_ids到一个电话号码,也就是说,
最终获取联系人信息,还是得通过电话号码;
3.snippet为最后收到/发出的信息
4._id为会话id,他关联到sms表中的thread_id字段。
- Cursor cursor = cr.query(Uri.parse("content://sms/"),
- new String[] { "* from threads--" }, null, null, null);
查询Threads表。
网上说Threads的URI为:"content://mms-sms/conversations"
不过由于本人使用这个Uri查询出错,故使用content://sms/ 通过构造查询字段数组来查询Threads表。
- public static List<Threads> getSession(ContentResolver cr) {
- Cursor cursor = cr.query(Uri.parse("content://sms/"),
- new String[] { "* from threads--" }, null, null, null);
- list = new ArrayList<Threads>();
- if (cursor.moveToFirst()) {
- do {
- if (threads == null) {
- threads = new Threads();
- }
- threads.set_id(cursor.getInt(ID));
- threads.setDate(cursor.getLong(DATE));
- threads.setError(cursor.getInt(ERROR));
- threads.setHas_attachment(cursor.getInt(HAS_ATTACHMENT));
- threads.setMessage_count(cursor.getInt(MESSAGE_COUNT));
- threads.setRead(cursor.getInt(READ));
- threads.setRecipient_ids(cursor.getString(RECIPIENT_IDS));
- threads.setSnippet(cursor.getString(SNIPPET));
- threads.setSnippet_cs(cursor.getInt(SNIPPET_CS));
- threads.setType(cursor.getInt(TYPE));
- list.add(threads);
- threads = null;
- } while (cursor.moveToNext());
- }
- return list;
- }
最后通过获取到的thread_id作为参数再去查询sms表。就可以获取每个会话的所有信息。
- package wu.lis.bu.utils;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- import wu.lis.bu.bean.Status;
- import android.content.ContentResolver;
- import android.database.Cursor;
- import android.net.Uri;
- import android.util.Log;
- public class SmsService {
- private final String SMS_URI_ALL = "content://sms/";
- private final String SMS_URI_INBOX = "content://sms/inbox";
- private final String SMS_URI_SEND = "content://sms/send";
- private final String SMS_URI_DRAFT = "content://sms/draft";
- List<Status> sms_list = null;
- Status status = null;
- public List<Status> getSmsInphone(ContentResolver cr, Integer thread_id) {
- sms_list = new ArrayList<Status>();
- String[] projection = new String[] { "_id", "address", "person",
- "body", "date", "type" };
- Uri uri = Uri.parse(SMS_URI_ALL);
- Cursor cursor = cr.query(uri, projection, "thread_id=?",
- new String[] { Integer.toString(thread_id) }, "date desc");
- if (cursor.moveToFirst()) {
- String name;
- String phoneNumber;
- String smsBody;
- String date;
- String type;
- //int nameColumn = cursor.getColumnIndex("person");
- int phoneNumberColumn = cursor.getColumnIndex("address");
- int smsBodyColumn = cursor.getColumnIndex("body");
- int dateColumn = cursor.getColumnIndex("date");
- int typeColumn = cursor.getColumnIndex("type");
- do {
- status = new Status();
- //name = cursor.getString(nameColumn);
- String pNumber = "";
- phoneNumber = cursor.getString(phoneNumberColumn);
- if (phoneNumber.length() > 11) {
- pNumber = phoneNumber.substring(phoneNumber.length() - 11,
- phoneNumber.length());
- } else {
- pNumber = phoneNumber;
- }
- name = PhoneService.getPeople(cr, pNumber);
- smsBody = cursor.getString(smsBodyColumn);
- SimpleDateFormat dateFormat = new SimpleDateFormat(
- "yyyy-MM-dd hh:mm:ss");
- Date d = new Date(Long.parseLong(cursor.getString(dateColumn)));
- date = dateFormat.format(d);
- int typeId = cursor.getInt(typeColumn);
- if (typeId == 1) {
- type = "接收";
- } else if (typeId == 2) {
- type = "发送";
- } else {
- type = "";
- }
- if (smsBody == null) {
- smsBody = "";
- }
- status.setPhoneNum(phoneNumber);
- status.setContent(smsBody);
- status.setLastReceive(date);
- status.setPerson(name);
- status.settype(type);
- sms_list.add(status);
- status = null;
- } while (cursor.moveToNext());
- }
- for (Status status : sms_list) {
- Log.i("Status", status.getPhoneNum());
- }
- return sms_list;
- }
- }
1 0
- 获取手机短信会话信息 Android
- Android 获取短信会话信息
- Android 获取短信会话信息 .
- Android 获取手机短信
- 会话信息获取函数
- Android 使用CursorLoader获取手机短信
- 获取Android手机短信中心号码
- 如何获取手机短信和通话记录信息
- 利用ContentResolver访问者获取手机短信信息
- android学习笔记31--------------短信会话列表信息的获取
- Android 获取手机短信(获取最新的)
- 获取手机短信
- android中获取手机短信,删除短信功能
- Android获取手机短信和通话记录及通讯录
- Android开发之获取手机短信验证码
- Android获取手机短信和通话记录及通讯录
- 关于Android中获取短信息会话(threads)表中的信息
- Android 获取短信会话列表
- 武汉科晴商鼎精灵医药版,与汉码盘点机无缝对接,汉码盘点机。
- MD5的C++源码
- Structure and Interpretation of Computer Programs-Exercise 1.3
- ftp改默认的21端口:
- 学以致用一:得到数组的最后一个元素。
- 获取手机短信会话信息 Android
- 【OJ】(二)---L---线性表
- java学习笔记1
- C++语言笔记系列之十一——友元函数与拷贝构造函数
- NYOJ 636 世界末日
- (多)继承中的构造与析构
- cocos2dx lua中使用class实现继承api中的类
- 字典树 之 hdu 1251
- 【每天总结一个ios开发心得】对于Retain和Assign属性的理解