Android 获取短信会话信息 .
来源:互联网 发布:sql for循环语句 编辑:程序博客网 时间:2024/05/01 03:23
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);
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;
- }
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;
- }
- }
- Android 获取短信会话信息
- Android 获取短信会话信息 .
- android学习笔记31--------------短信会话列表信息的获取
- Android 获取短信会话列表
- Android 获取短信会话列表
- Android 获取短信会话列表
- 获取手机短信会话信息 Android
- android获取短信电话信息
- android获取短信电话信息
- Android 短信会话相关
- Android-通讯录:获取短信会话列表(包括群发的)
- android 获取手机中的短信信息
- Android:ContentProvider获取短信的信息
- 【Android】短信应用——短信信息实时获取
- 【Android】短信应用——短信信息实时获取
- Android开发---用户注册+短信验证+(自动获取短信信息)
- 会话信息获取函数
- android发送短信、会话列表、短信详情
- vi常用命令总结
- uva 11258 String Partition
- 基于jwSMTP的C++发送Email的Demo
- HDU 2648 Shopping
- abstract class和interface有什么区别?
- Android 获取短信会话信息 .
- 通过SvcUtil.exe生成客户端代码和配置
- 基于Predictive Parsing的ABNF语法分析器(五)——AbnfParser文法解析器之单字符的情形(如HTAB、LF、CR、SP)
- window.opener用法
- hibernate检索策略总结
- C++编程开发学习的50条建议
- Android本地视频播放器开发--ffmpeg解码视频文件中的音频(2)
- CreateDIBSection 理解BMP文件的格式
- MySQL新建用户,授权,删除用户,修改密码