Android初级教程之内容提供者获取联系人信息
2016-06-12 21:40
375 查看
内容提供折详细理论知识请参考之前的博文:http://blog.csdn.net/qq_32059827/article/details/51646513
这里新建了三个联系人信息,通过查看系统联系人源码知道,对三张表进行操作。
raw_contacts表:
contact_id:联系人id
data表:联系人的具体信息,一个信息占一行
data1:信息的具体内容
raw_contact_id:联系人id,描述信息属于哪个联系人
mimetype_id:描述信息是属于什么类型
mimetypes表:通过mimetype_id到该表查看具体类型
先查询raw_contacts表拿到联系人id
然后拿着联系人id去data表查询属于该联系人的信息
得到data1字段的值,就是联系人的信息,通过mimetype判断是什么类型的信息
主要代码如下,对代码做出了详细的解释:
这里新建了三个联系人信息,通过查看系统联系人源码知道,对三张表进行操作。
联系人数据库
raw_contacts表:contact_id:联系人id
data表:联系人的具体信息,一个信息占一行
data1:信息的具体内容
raw_contact_id:联系人id,描述信息属于哪个联系人
mimetype_id:描述信息是属于什么类型
mimetypes表:通过mimetype_id到该表查看具体类型
读取联系人
先查询raw_contacts表拿到联系人idCursor cursor = cr.query(Uri.parse("content://com.android.contacts/raw_contacts"), new String[]{"contact_id"}, null, null, null);
然后拿着联系人id去data表查询属于该联系人的信息
Cursor c = cr.query(Uri.parse("content://com.android.contacts/data"), new String[]{"data1", "mimetype"}, "raw_contact_id = ?", new String[]{contactId}, null);
得到data1字段的值,就是联系人的信息,通过mimetype判断是什么类型的信息
while(c.moveToNext()){ String data1 = c.getString(0); String mimetype = c.getString(1); if("vnd.android.cursor.item/email_v2".equals(mimetype)){ contact.setEmail(data1); } else if("vnd.android.cursor.item/name".equals(mimetype)){ contact.setName(data1); } else if("vnd.android.cursor.item/phone_v2".equals(mimetype)){ contact.setPhone(data1); } }
主要代码如下,对代码做出了详细的解释:
package com.itheima.getcontacts; import com.itheima.getcontacts.domain.Contact; import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.content.ContentResolver; import android.database.Cursor; import android.view.Menu; import android.view.View; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click(View v){ //通过内容提供者访问联系人数据库 ContentResolver cr = getContentResolver();//因为要查三张表,因此知道每张表都对应不同的路径,路径是什么去查看源码 。先查raw_contacts表 字段 查询条件 Cursor cursorContactId = cr.query(Uri.parse("content://com.android.contacts/raw_contacts"), new String[]{"contact_id"}, null, null, null); //里面封装着1、2、3 while(cursorContactId.moveToNext()){//封装着1、2、3 //,获取到raw_contacts表中的联系人id String contactId = cursorContactId.getString(0);//分别依次得到1、2、3 //再查data表 data表的路径 data表要三个字段,联系人id已经获得,因此这个表不用再查联系人id Cursor cursorData = cr.query(Uri.parse("content://com.android.contacts/data"), new String[]{"data1", "mimetype"}, //无mimetype_id只有mimetype。这样更方便,不用再去查第三张表了 "raw_contact_id = ?", new String[]{contactId}, null);//里面封装着data1、mimetype信息 //获取所有字段的名字 /*String[] names = cursorData.getColumnNames(); for (String string : names) { System.out.println(string); }*/ Contact con = new Contact(); while(cursorData.moveToNext()){//里面封装着data1、mimetype信息。例如联系人id=1时,while也要遍历三次 String data1 = cursorData.getString(0);//获取某个联系人id下的data1信息。一行信息又对应一个mimetype类型数据 String mimetype = cursorData.getString(1);//获取某个联系人id下的mimetype信息 //通过mimetype的判断,把data1存入对应的属性 if("vnd.android.cursor.item/email_v2".equals(mimetype)){//例如联系人id=1时 con.setEmail(data1); } else if("vnd.android.cursor.item/phone_v2".equals(mimetype)){ con.setPhone(data1); } else if("vnd.android.cursor.item/name".equals(mimetype)){ con.setName(data1); } } System.out.println(con.toString()); } } }
相关文章推荐
- Android初级教程之内容提供者获取联系人信息
- 将uniy3D集成到android的子窗口中
- 制作自定义背景Button按钮、自定义形状Button的全攻略
- Android贝塞尔曲线实现粘性 小圆点指示器
- TakePhoto-轻量级Android照片处理框架
- Android保存图片到相册
- Android MedeaCodec的单帧模式编解码
- Android自定义控件
- Android ListView的优化
- Android之PopWindow
- (OK) Android —— gem5跑bench(Android)过程记录 + vncviewer
- 将html5变身Android APP之phonegap的使用
- android 隐藏系统键盘
- 百度地图API出现如下报错,系统时间问题
- Android开发中使用fastJSON将json格式的数据快速解析生成实体类并附上实体类生成器
- android容联云IM的SDK下载及将FullDemo引入工程(提供引入后demo的下载)
- [Android]使用Intent跳转至桌面首页
- Android高性能ORM数据库DBFlow入门
- Android root 原理
- android 跨进程调用service学习(二)