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 获取联系人信息
- // 通过隐式意图打开通讯录
- Intentintent=newIntent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
- startActivityForResult(intent,1001);
- // 获取选择后的返回结果
- @Override
- protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
- super.onActivityResult(requestCode,resultCode,data);
- if(requestCode==1001){
- if(resultCode==RESULT_OK){
- ContentResolverresolver=getContentResolver();
- Uriuri=data.getData();
- //uri = content://com.android.contacts/contacts/lookup/0r5-D9ADC7B9BBC9C7B9DBBDADC9/5
- Cursorcursor=resolver.query(uri,null,null,null,
- null);
- if(cursor.moveToFirst()){
- for(inti=0;i<cursor.getColumnCount();i++){
- Log.i("-->",cursor.getColumnNames()+":"+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
通过分析,我们可以得到我们关心的三个字段
来自为知笔记(Wiz)