• getContentResolver()内容解析者查询联系人、插入联系人


    首先,我们需要知道的两个Uri:

    1、Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");//查到data表中raw_contact_id

    2、Uri uri1 = Uri.parse("content://com.android.contacts/data");

    想取数据库里面的信息,就必须要知道表的结构我们看一下view_data表:

    我们只需要关心下面三列数据:

    从表中我们可以看出,Google将联系人信息放在了一列中,也就是data1列,根据raw_contact_id来区分是否为同一个人的信息,根据mimetype区分联系人信息中的name、phone、email,所以首先我们要获得的是raw_contact_id,但是view_data表中的raw_contact_id是重复的。

    下面我们再来看一张表raw_contacts

    从这张表中,我们可以获得联系人的raw_contact_id,也就可以获得联系人的个数,然后通过raw_contact_id获取每个联系人。

    表的结构了解了,下面我们来看代码:

     1     public void readContacts(){
     2         String name = null;
     3         String phone= null;
     4         String eMail= null;
     5         Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
     6         Uri uri1 = Uri.parse("content://com.android.contacts/data");
     7         Cursor cursor = getContentResolver().query(uri,new String[]{"contact_id"},null,null,null);
     8         while (cursor.moveToNext()){
     9             String contacts_id = cursor.getString(0);
    10             //System.out.println("contact_id :"+contacts_id);
    11 
    12             if (contacts_id!=null){
    13                 /**
    14                  * projection  第二个参数,要查询的列,为null则是查询所有的列
    15                  * selection    第三个参数,根据什么条件查询
    16                  * selectionArgs    第四个参数,根据什么查的参数
    17                  *
    18                  */
    19                 Cursor cursor1 = getContentResolver().query(uri1,new String[]{"data1","mimetype"},"raw_contact_id=?",new String[]{contacts_id},null);
    20                 while (cursor1.moveToNext()){
    21                     String data1 = cursor1.getString(0);
    22                     String mimetype = cursor1.getString(1);
    23                     //System.out.println("data1:"+data1+"--"+"mimetype:"+mimetype);
    24                     if (mimetype.equals("vnd.android.cursor.item/name")){
    25                         name = data1;
    26                     }else if (mimetype.equals("vnd.android.cursor.item/phone_v2")){
    27                         phone = data1;
    28                     }else if (mimetype.equals("vnd.android.cursor.item/email_v2")){
    29                         eMail = data1;
    30                     }
    31 
    32                 }
    33                 System.out.println("name:"+name+"- phone:"+phone+" -email:"+eMail);
    34             }
    35         }
    36     }

    记得加权限:

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

    从代码中,我们可以看的很清楚,先获取raw_contact_id,然后通过他,获取data1和mimetype,然后通过mimetype知道data1中的数据是name、phone或者email。

    ps:其实解析data表就是解析view_data

    下面是插入联系人:
    看代码:
        public void insertContacts(){
            Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
            Uri uri1 = Uri.parse("content://com.android.contacts/data");
            Cursor cursor = getContentResolver().query(uri,null,null,null,null);
            int count = cursor.getCount();
            int count_id = count+1;
    
            ContentValues values = new ContentValues();
            values.put("contact_id",count_id);
            getContentResolver().insert(uri,values);
            ContentValues contactValue = new ContentValues();
            
            contactValue.put("data1","张三");
            contactValue.put("raw_contact_id",count_id);
            contactValue.put("mimetype","vnd.android.cursor.item/name");
            getContentResolver().insert(uri1,contactValue);
            contactValue.clear();//插完之后记得clear
            
            contactValue.put("data1","133333333");
            contactValue.put("raw_contact_id",count_id);
            contactValue.put("mimetype","vnd.android.cursor.item/phone_v2");
            getContentResolver().insert(uri1,contactValue);
            contactValue.clear();
            
            contactValue.put("data1","478569@qq.com");
            contactValue.put("raw_contact_id",count_id);
            contactValue.put("mimetype","vnd.android.cursor.item/email_v2");
            getContentResolver().insert(uri1,contactValue);
            contactValue.clear();
        }
    
    

    基本思路,先从raw_contact表中获取当前联系人的个数,然后在加上1之后插入联系人,



    GitHub:https://github.com/godfunc
    博客园:http://www.cnblogs.com/godfunc
    Copyright ©2019 Godfunc
  • 相关阅读:
    paraview添加vector
    origin横纵坐标颠倒
    [转] python提取计算结果的最大最小值及其坐标
    康奈尔大学CFD课程
    anaconda多环境配置
    mfix的Negative gas density报错解决
    python基础补漏-01
    ssh 公钥登陆的问题
    多进程
    关于GIL
  • 原文地址:https://www.cnblogs.com/Godfunc/p/6062366.html
Copyright © 2020-2023  润新知