你的位置:首页 > 操作系统

[操作系统]ContentProvider中央档案馆,以及获取联系人电话的示例


Android官方文档介绍的数据存储方式共有五种,sqlite,SharedPreferences,网络存储,外储存储,文件存储,但是这些数据都无法进行共享,那么我们就引入了今天的主角:ContentProvider
  1. ContentProvider:为我们的应用程序之间提供了共享数据的一种机制,比如获取手机里面的通话记录,通讯录,多媒体,图片等;
  2. ContentProvider为数据的存储和获取数据提供了统一的数据接口,它对数据进行了封装,我们不用关心数据存储的细节;
  3. 使用ContentProvider可以在不同的应用程序之间共享数据;
  4. 每一个ContentProvider都拥有一个公共的URI,这个URI用于表示这个ContentProvider所提供的数据;
  5. Android为我们提供的ContentProvider,都存放在android.provider包中;
  6. URI介绍
    1. 概念就是为系统的每一个资源给一个名字,比如通话记录;
    2. 每一个ContentProvider都有一个公共的URI,这个URI用于表示这个ContentProvider所提供的的数据;
    3. 每个URI包含四部分
      1. 前缀:比如content://
      2. 标识:用于表示唯一性,外部通过这个标识找到它,一般为该ContentProvider的包+类的名称;
      3. 路径:就是你要操作数据中表的名字
      4. 如果URI中捕获的记录包含该ID,就返回该ID对应的数据,如果没有ID,就返回全部.比如路径可以定义为:
        1. /person/10:返回person表中id为10的记录;
        2. /person/10/name:id为10的记录的name字段;
  7. ContentResolver操作ContentProvider中的数据;可以使用Activity提供的getContentResolver()方法;它有四个相同签名的方法insert,update,delete,query
  8. 获取联系人信息
    1. // 通过隐式意图打开通讯录
    2. Intent intent =newIntent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
    3. startActivityForResult(intent,1001);

    1. // 获取选择后的返回结果
    2. @Override
    3. protectedvoid onActivityResult(int requestCode,int resultCode,Intent data){
    4. super.onActivityResult(requestCode, resultCode, data);
    5. if(requestCode ==1001){
    6. if(resultCode == RESULT_OK){
    7. ContentResolver resolver = getContentResolver();
    8. Uri uri = data.getData();
    9. //uri = content://com.android.contacts/contacts/lookup/0r5-D9ADC7B9BBC9C7B9DBBDADC9/5
    10. Cursor cursor = resolver.query(uri,null,null,null,
    11. null);
    12. if(cursor.moveToFirst()){
    13. for(int i =0; i < cursor.getColumnCount(); i++){
    14. Log.i("-->", cursor.getColumnNames()[i]+":"+ cursor.getString(i));
    15. }

     

    1. sort_key:wang hongxiao
    2. photo_uri:null
    3. send_to_voicemail:0
    4. contact_status:null
    5. contact_status_label:null
    6. pinned:0
    7. display_name:wang hongxiao
    8. phonebook_label_alt:H
    9. phonebook_bucket:23
    10. contact_status_res_package:null
    11. in_default_directory:1
    12. photo_id:null
    13. custom_ringtone:null
    14. _id:5
    15. times_contacted:0
    16. phonebook_label:W
    17. display_name_alt:hongxiao, wang
    18. lookup:0r5-D9ADC7B9BBC9C7B9DBBDADC9
    19. phonetic_name:null
    20. last_time_contacted:0
    21. contact_last_updated_timestamp:1477791122100
    22. has_phone_number:1
    23. in_visible_group:1
    24. display_name_source:40
    25. photo_file_id:null
    26. is_user_profile:0
    27. contact_status_ts:null
    28. sort_key_alt:hongxiao, wang
    29. phonebook_bucket_alt:8
    30. contact_presence:null
    31. starred:0
    32. photo_thumb_uri:null
    33. contact_status_icon:null
    34. contact_chat_capability:null
    35. phonetic_name_style:0
    36. name_raw_contact_id:5

    通过分析,我们可以得到我们关心的三个字段
 



来自为知笔记(Wiz)