一.ContentProvider
1.什麼是ContentProvider
ContentProvider是Android四大組件之一, 用來將程式內的資料共用給其他程式.
在共用資料的時候, 將操作資料的代碼封裝成方法, 不直接把資料暴露出來, 提高安全性.
可以對ContentProvider註冊ContentObserver, 即時監聽資料修改.
2.怎麼建立和訪問ContentProvider *****
定義類繼承ContentProvider, 在資訊清單檔<application>節點中註冊<provider>節點
將程式安裝到手機上之後, 其他應用就可以訪問了
訪問時擷取到ContentResolver對象, 指定Uri, 調用增刪改查方法
3.ContentProvider中注意的細節 ***
在ContentProvider中可以通過Uri識別表名, 可以識別ID
使用UriMatcher類可以識別一個路徑, 調用addUri()方法添加路徑, 然後使用match()方法匹配一個Uri可以得到預先設定的結果碼
Uri中帶著的ID可以用ContentUris類的parseId()方法得到
在插入方法執行結束後, 需要返回一個帶ID的Uri, 也可以使用ContentUris類的withAppendedId()方法完成
4.使用ContentObserver觀察ContentProvider的資料改變 *****
使用ContentResolver的registerContentObserver()方法可以在指定Uri上註冊一個ContentObserver
ContentObserver的onChange()方法在ontentProvider調用ContentResolver.notifyChange()方法時, 自動執行
二.監聽簡訊
1.使用GIT下載原始碼
查看清單得到authorities, 查看java代碼瞭解子級路徑
2.添加觀察者
給系統中簡訊資料的內容提供者註冊觀察者, 在資料改變的時候, 查詢最後一條記錄
擷取其中address, type, date, body四個欄位
三.操作連絡人
1.下載代碼 *
和簡訊代碼相同, 使用GIT下載, 找到authorities和子級路徑
2.讀連絡人 ***
先讀raw_contacts表得到所有的id
用id作為查詢條件, 查詢data表. mimetype是資料類型, data1是資料
3.寫連絡人
先向raw_contacts表寫入一個自動產生的id
再用id作為data表中raw_contact_id列的值, 插入資料
多個插入操作應該是一組操作, 要麼都成功, 要麼都失敗
可以使用ContentResolver類的applyBatch()方法實現