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”