Android官方文檔介紹的數據存儲方式共有五種,sqlite,SharedPreferences,網路存儲,外儲存儲,文件存儲,但是這些數據都無法進行共用,那麼我們就引入了今天的主角:ContentProvider // 通過隱式意圖打開通訊錄 Intent intent =newIntent(I ...
Android官方文檔介紹的數據存儲方式共有五種,sqlite,SharedPreferences,網路存儲,外儲存儲,文件存儲,但是這些數據都無法進行共用,那麼我們就引入了今天的主角:ContentProvider
- ContentProvider:為我們的應用程式之間提供了共用數據的一種機制,比如獲取手機裡面的通話記錄,通訊錄,多媒體,圖片等;
- ContentProvider為數據的存儲和獲取數據提供了統一的數據介面,它對數據進行了封裝,我們不用關心數據存儲的細節;
- 使用ContentProvider可以在不同的應用程式之間共用數據;
- 每一個ContentProvider都擁有一個公共的URI,這個URI用於表示這個ContentProvider所提供的數據;
- Android為我們提供的ContentProvider,都存放在android.provider包中;
- URI介紹
- 概念就是為系統的每一個資源給一個名字,比如通話記錄;
- 每一個ContentProvider都有一個公共的URI,這個URI用於表示這個ContentProvider所提供的的數據;
- 每個URI包含四部分
- 首碼:比如content://
- 標識:用於表示唯一性,外部通過這個標識找到它,一般為該ContentProvider的包+類的名稱;
- 路徑:就是你要操作數據中表的名字
- 如果URI中捕獲的記錄包含該ID,就返回該ID對應的數據,如果沒有ID,就返回全部.比如路徑可以定義為:
- /person/10:返回person表中id為10的記錄;
- /person/10/name:id為10的記錄的name欄位;
- ContentResolver操作ContentProvider中的數據;可以使用Activity提供的getContentResolver()方法;它有四個相同簽名的方法insert,update,delete,query
- 獲取聯繫人信息
// 通過隱式意圖打開通訊錄
Intent intent =newIntent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent,1001);
// 獲取選擇後的返回結果
@Override
protectedvoid onActivityResult(int requestCode,int resultCode,Intent data){
super.onActivityResult(requestCode, resultCode, data);
if(requestCode ==1001){
if(resultCode == RESULT_OK){
ContentResolver resolver = getContentResolver();
Uri uri = data.getData();
//uri = content://com.android.contacts/contacts/lookup/0r5-D9ADC7B9BBC9C7B9DBBDADC9/5
Cursor cursor = resolver.query(uri,null,null,null,
null);
if(cursor.moveToFirst()){
for(int i =0; i < cursor.getColumnCount(); i++){
Log.i("-->", cursor.getColumnNames()[i]+":"+ cursor.getString(i));
}
sort_key:wang hongxiao
photo_uri:null
send_to_voicemail:0
contact_status:null
contact_status_label:null
pinned:0
display_name:wang hongxiao
phonebook_label_alt:H
phonebook_bucket:23
contact_status_res_package:null
in_default_directory:1
photo_id:null
custom_ringtone:null
_id:5
times_contacted:0
phonebook_label:W
display_name_alt:hongxiao, wang
lookup:0r5-D9ADC7B9BBC9C7B9DBBDADC9
phonetic_name:null
last_time_contacted:0
contact_last_updated_timestamp:1477791122100
has_phone_number:1
in_visible_group:1
display_name_source:40
photo_file_id:null
is_user_profile:0
contact_status_ts:null
sort_key_alt:hongxiao, wang
phonebook_bucket_alt:8
contact_presence:null
starred:0
photo_thumb_uri:null
contact_status_icon:null
contact_chat_capability:null
phonetic_name_style:0
name_raw_contact_id:5