android會把短信信心保存在數據庫中,可查看/dbdata/databases/com.android.providers.telephony/mmssms.db。但是我們不能直接訪問數據庫,隻能通過ContentProvider來訪問它。
以下是訪問短信數據庫的uri
content://sms/inbox 收件箱
content://sms/sent 已發送
content://sms/draft 草稿
content://sms/outbox 發件箱
content://sms/failed 發送失敗
content://sms/queued 待發送列表
數據庫相關字段如下:
_id 一個自增字段,從1開始
thread_id 序號,同一發信人的id相同
address 發件人手機號碼(根據這個查找聯系人姓名?)
person 聯系人列表裡的序號,陌生人為null
date 發件日期,單位是milliseconds,從1970/01/01至今所經過的時間)
protocol 協議,分為: 0 SMS_RPOTO, 1 MMS_PROTO
read 是否閱讀,0未讀, 1已讀
status 狀態,-1接收,0 complete, 64 pending, 128 failed
type
ALL = 0;
INBOX = 1;
SENT = 2;
DRAFT = 3;
OUTBOX = 4;
FAILED = 5;
QUEUED = 6;
body 短信內容
service_center 短信服務中心號碼編號
subject 短信的主題
reply_path_present TP-Reply-Path
locked
查詢信息:
檢索數據方法很簡單: 在Activity中
java代碼:
Uri uri = Uri.parse("content://sms/inbox");
Cursor cur = this.managedQuery(uri, null, null, null, null);
if (cur.moveToFirst()) {
do{
for(int j = 0; j < cur.getColumnCount(); j++){
info = "name:" + cur.getColumnName(j) + "=" + cur.getString(j);
Log.i("====>", info);
}
}while(cur.moveToNext());
}
managedQuery(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)參數依次為uri上面已列出
查詢字段 查詢字段數組,也可以將所有需要查詢的字段放入一個字符內
比如new String[]{"_id", "thread_id"}和new String[]{"_id,thread_id"}是一致的。
跟SQL一樣,字段名不區分大小寫
條件 不帶Where的SQL 條件字符比如"_id=? And thread_id = ? Or type = '1'"
條件中的參數 參數字符數組,跟上述的條件一一對應
排序 不帶Order by排序字符串,比如_id desc, type
如果參數為null,SQL中查詢字段為“*”,相關的條件為空白 刪除信息:
java代碼:
this.getContentResolver().delete(Uri.parse("content://sms"), "_id=?", new String[]{"3"});
Url中content://sms 替換成content://sms/ 也成功,但是其它url時程序報錯,比如content://sms/inbox記得要加上權限
java代碼:
<uses-permission android:name="android.permission.WRITE_SMS"></uses-permission>
<uses-permission android:name="android.permission.READ_SMS"></uses-permission>
作者“xSTARx”