获取手机中联系人的数据

来源:互联网 发布:windows 7系统镜像包 编辑:程序博客网 时间:2024/05/19 14:40

看到这个标题:首先必须想到
1,找到手机系统为我们提供的联系人数据库,其地址为:
/data/data/com.android.providers.contact/cache/database/contacts2.db
2,查询数据库中的表:data(得到数据),mimetypes(获取类型),raw_contacts(获取ID),和视图view(关系)
3,具体实现代码如下:写个公共静态的方法

public class ContactUtils{    public static List<ContactInfo> getContacts(Context context){    //准备一个集合用来转载查询的联系人数据    List<ContactInfo> lists = new ArrayList<>();    //获得一个内容解析者,(查询别人的数据库)    ContentResolver resolver = context.getContentReslver();    //准备uri(查询的是那张表,其组成为:content://主机名/表名)查询到具体的contact_id    Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");    //在准备一个Uri根据具体的contact_id,查询具体的联系人信息    Uri datauri = Uri.parse("content://com.android.contacts/data");    //开始查询    Cursor cursor = resolver.query(uri,new String[]{"contact_id"},null,null,null);    while(cursor .moveToNext()){    //说明有数据    String contact_id = cursor.getString(0);    if(!TextUtils.isEmpty(contact_id)){    ContactInfo info = new ContactInfo();    //开始根据新的条件查询具体的数据    Cursor dataCursor = resolver.query(datauri, new String[]{"mimetype","data1"},"raw_contact_id = ?",new String[]{contact_id},null);    while(dataCursor.moveToNext()){     String mimetype = dataCursor.getString(0);                    if("vnd.android.cursor.item/phone_v2".equals(mimetype)) {                        //说明是一个电话号码                        info.phone= dataCursor.getString(1);                    }else if("vnd.android.cursor.item/name".equals(mimetype)) {                        //说明这个data1是名字                        info.name=dataCursor.getString(1);                    }                }                lists.add(info);        }    }    return  lists;   }     public static  class ContactInfo{      public   String name; //联系人名字      public  String phone;//联系人的号码    }}
0 0