Android关于手机数据读取联系人数据

原创 2015年07月08日 22:48:02

第一次 在csdn发表博客,主要用于大家一起学习,共勉

今天学习了如何从手机数据库中查找联系人数据,电话,图片什么的都可以用此方法类推,本人技术有限,如果有什么不足的地方,希望大家提出意见。谢谢

开始

android系统中联系人数据在DATA/DATA/com.android.providers.contacts/databases/contact2.db中

我们可以使用SQLite Expert Personal 把到出的contact2.db文件进行解析读取出来

这个数据库文件中包含很多的表和视图文件

我们找到contacts、data、mimetypes  这三张表


我点开第一张表contacts

 里面包含了id 、phontoId、raw_contact_id

id表示一个联系人、这个联系图片ID phonoId则表示图片Id(就像把每个人照片放放在通信录里)

raw_contact_id则在关联表中体现出来,应为因为所有的文字信息都是存在data中data1里面 data15存的是16进制一串数字

mimetypes存的是data1中每个数据的类型,而在data中这些是用数字表示




所以我们获取联系人逻辑应该是在,Contacts这张表中遍历第一行和第二行,我们就可以得到所有的联系人id、和photoId

在android中访问其他软件数据库,或者官方data数据库时,我们需要借助android四大组件中的contentProvider(内容提供者)

再借助ContentResolver类获取数据

具体代码

List<Contact> cs=new ArrayList<Contact>();

ContentResolver contentResolver=Context.getContentResolver();

再通过JAVA封装好的查询方法查询

Uri uri=Contacts.CONTENT_URI;


String [] columns =new String[]{

Contacts._ID,                  // API已经全部封装好了

Contacts.PHOTO_ID

};

Cursor cursor=r.query(uri, columns, null, null, null);  // 查询所有数据

while(cursor.moveToNext()){
Contact c=new Contact();
int id=cursor.getInt(0);
int photoId=cursor.getInt(1);
c.setId(id);
c.setPhotoId(photoId);
//通过id 去data表中查询当前联系人的其他信息
//uri2:   content://com.android.contacts/data
Uri uri2=Data.CONTENT_URI;
String[] columns2={
Data.DATA1, //0
Data.DATA15, //1
Data.MIMETYPE //2
};
Cursor c2=r.query(uri2, columns2, Data.RAW_CONTACT_ID+"="+id, null, null);
while(c2.moveToNext()){
String data1=c2.getString(0);
String mt=c2.getString(2);
if(mt.equals(Email.CONTENT_ITEM_TYPE)){
//当前数据描述的是联系人的email
c.setEmail(data1);
}else if(mt.equals(Phone.CONTENT_ITEM_TYPE)){
//当前数据描述的是联系人的phone
c.setPhone(data1);
}else if(mt.equals("vnd.android.cursor.item/postal-address_v2")){
//当前数据描述的是联系人的address
c.setAddress(data1);
}else if(mt.equals("vnd.android.cursor.item/name")){
//当前数据描述的是联系人的name
c.setName(data1);
}
}

                cs.add(c);

               c2.colse();

         }

        c.colse();

我们得到的集合就是所有的联系人数据,具体我们需要创建个联系人实体类,以后可以通过get方法获取数据

android从通讯录中选择联系人并读取号码

1.Manifest文件中添加权限配置: 2.声明打开联系人应用的Intent:Intent intent = new Intent(I...
  • wf_kingofring
  • wf_kingofring
  • 2015年11月02日 13:39
  • 1354

andorid调用手机通讯录中的联系人

为了实现一个类似通讯录的功能,所以下了下面这个model,来实现得到手机通讯录的联系人 代码如下: public class ContactModel { public void get...
  • wagg1993323
  • wagg1993323
  • 2016年10月17日 20:42
  • 395

Android软件开发之获取通讯录联系人信息 + android联系人信息的存储结构 + Android联系人读取操作笔记

总结的最好的一篇文章是: http://blog.csdn.net/xys289187120/article/details/6730957 但要纠错下: Contacts表中没有displ...
  • snwrking
  • snwrking
  • 2012年05月25日 14:16
  • 57403

Android手机获取通讯录联系人信息及短信广播实现

现在越来越多的android应用在注册时都要用到手机号码,通过获取手机验证码来完成注册。也有不少应用提供了手机通讯录备份功能,获得你的允许后把你的通讯录中的手机号码保存到服务器中,你要的时候又可以do...
  • true100
  • true100
  • 2015年04月03日 09:30
  • 1738

ContactPicker(选择联系人) - Android

  • 2014年03月20日 17:26
  • 2.57MB
  • 下载

Android访问通讯录和添加联系人

Android中通讯录使用ContentProvider实现 Android中通讯录界面是使用一个App 存储内容使用的是另一个App 需要的权限: 还有junit单...
  • shuangyvshenshi
  • shuangyvshenshi
  • 2014年11月27日 17:03
  • 29266

Android基础:获取手机联系人工具类

Android基础:获取手机联系人工具类
  • ss1168805219
  • ss1168805219
  • 2016年04月21日 21:06
  • 1289

Android中获取手机中的联系人信息

Android获取手机中的联系人信息
  • hong_world
  • hong_world
  • 2016年06月11日 21:22
  • 6402

Android查询联系人

1 public static final String[] PERSONAL_CONTACTS_SUMMARY_PROJECTION = new String[] { Contacts...
  • wds1181977
  • wds1181977
  • 2014年10月29日 16:26
  • 542

android操作通讯录的联系人

界面配置文件     android:orientation="vertical"     android:layout_width="fill_parent"     android:layout...
  • liyuanjinglyj
  • liyuanjinglyj
  • 2013年07月18日 15:12
  • 1261
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android关于手机数据读取联系人数据
举报原因:
原因补充:

(最多只允许输入30个字)