通过查询语句:Cursor cursor = mContext.getContentResolver().query(Uri.parse("content://sms"), null, "type = 1 and read = 0", null, null);打印可以看到数据库中所有的列字段
String names[] = cursor.getColumnNames();
name = _id i = 0 //短消息序号自动递增 如100
name = thread_id i = 1 //序号,同一发信人的id相同
name = address i = 2 //发件人地址,手机号.如:10086
name = person i = 3 //发件人,返回一个数字就是联系人列表里的序号,陌生人为null
name = date i = 4 //日期,long型
name = date_sent i = 5
name = protocol i = 6 //协议 0 SMS_RPOTO, 1 MMS_PROTO
name = read i = 7 //是否阅读 0未读, 1已读
name = status i = 8 //状态 -1接收,0 complete, 64 pending, 128 failed
name = type i = 9
//ALL = 0;
//INBOX = 1; 接收
//SENT = 2; 发送
//DRAFT = 3;
//OUTBOX = 4;
//FAILED = 5;
//QUEUED = 6;
name = reply_path_present i = 10
name = subject i = 11 //短信的主题,一般为null
name = body i = 12 //短信内容
name = service_center i = 13 //短信服务中心号码编号,如+8613800752011
name = locked i = 14
name = error_code i = 15
name = seen i = 16
name = timed i = 17
name = deleted i = 18
name = sync_state i = 19
name = marker i = 20
name = source i = 21
name = bind_id i = 22
name = mx_status i = 23
name = mx_id i = 24
name = out_time i = 25
name = account i = 26
name = block_type i = 27
name = sim_id i = 28
name = advanced_seen i = 29
以上作了注释的是较为常用的,我们可以只查询出常用的列,查询函数原型:query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
第二个参数:projection,可以写上我们需要的列,第三个:selection是查询的条件。
private static final String[] PROJECTION = new String[] { SMS._ID,// 0
SMS.TYPE,// 1
SMS.ADDRESS,// 2
SMS.SUBJECT,// 3
SMS.BODY,// 4
SMS.DATE,// 5
SMS.THREAD_ID,// 6
SMS.READ,// 7
SMS.PROTOCOL // 8
};
Cursor c