Android學習--11-內容提供器

不一樣於文件和SharedPreferences存儲中的兩種全局讀寫操做,內容提供器能夠選擇只對哪一部分數據進行共享,防止數據不會泄露。java

ContentResolver類android

讀取手機聯繫人

List<String> contactsList = new ArrayList<String>();
private void readContacts() {
Cursor cursor = null;
try {
// 查詢聯繫人數據
cursor = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, null, null, null);
while (cursor.moveToNext()) {
// 獲取聯繫人姓名
String displayName = cursor.getString(cursor.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
// 獲取聯繫人手機號
String number = cursor.getString(cursor.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.NUMBER));
contactsList.add(displayName + "\n" + number);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (cursor != null) {
cursor.close();
}
}

使用了query()方法,傳入uri參數。而後對Cursor對象進行遍歷,最後關閉。app

固然還須要相應的權限ide

<uses-permission android:name="android.permission.READ_CONTACTS" />

自定義內容提供器

就像寫個接口同樣,提供相應路徑,訪問我,就給你相應的數據。code

extends ContentProvider

標準的URI寫法:xml

content://com.example.app.provider/table1對象

*:表示匹配任意長度的任意字符 #:表示匹配任意長度的數字接口

content://com.example.app.provider/*字符串

那麼誰來實現匹配內容URI呢: UriMatcherget

提供了一個addURI() 方法,接收三個參數: 權限、路徑、自定義的代碼

UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI("com.example.app.provider", "table1", 0);

獲取 Uri 對象所對應的 MIME 類型,一個內容 URI 所對應的 MIME字符串主要由三部分組分

  1. 必須以 vnd 開頭。
  2. 若是內容 URI 以路徑結尾,則後接 android.cursor.dir/,若是內容 URI 以 id 結尾, 則後接 android.cursor.item/。
  3. 最後接上 vnd.<authority>.<path>。
vnd.android.cursor.dir/vnd.com.example.app.provider.table1

內容提供器在 AndroidManifest.xml 文件中註冊

<provider
android:name="自定義內容提供器的全名"
android:authorities="包名.provider" >
</provider>

如何去訪問自定義的內容提供器呢?

Uri uri = Uri.parse("content://com.example.app.provider/table1");
//查所有 ,到這一步就很熟悉了,遍歷取出數據。
Cursor cursor = getContentResolver().query(uri, null, null,null, null);
相關文章
相關標籤/搜索