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

第一次 在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方法获取数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
通过使用Android Studio中的内容提供者,我们可以轻松地实现建立手机通讯录界面并读取系统联系人的功能。 首先,我们需要创建一个新的Android项目,并在项目的布局文件中设计通讯录界面。可以包括一个ListView用于显示联系人列表,以及可选的搜索框等组件。 接下来,我们需要编写一个自定义的内容提供者。这个内容提供者将封装我们对系统联系人数据的访问。可以参考Android提供的ContactsContract类,其中包含了通讯录的数据结构和相关的查询方法。 在内容提供者中,我们需要实现读取系统联系人的功能。可以使用ContentResolver的query()方法来执行查询操作,并通过向查询结果Cursor中添加特定的列,来获取我们需要的联系人字段,如姓名、电话号码等。 接着,我们需要在通讯录界面的Activity中使用Loader来加载联系人数据。我们可以使用CursorLoader来实现这一功能,并指定要加载的数据源为我们自定义的内容提供者。 加载完成后,我们将获取到的联系人数据填充到ListView中,以展示联系人列表。可以使用SimpleCursorAdapter来帮助我们将Cursor中的数据绑定到ListView的每一项。 最后,我们可以为通讯录界面的ListView添加点击事件,当用户点击某个联系人时,可以跳转到该联系人的详细信息页面,或执行其他操作。 通过上述步骤,我们可以实现一个简单的手机通讯录界面,并成功读取系统联系人。这样,用户就可以方便地查看、搜索和管理手机通讯录中的联系人信息了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值