三张重要的表:
一、data表 data1 li'm里面存储的是所有联系人的信息
data表中的raw_contact_id 实际上是raw_contacts表中的contact_id
data表中的mimetype_id列对应mimetype表
二、raw_contacts表
三、mimetype表
读取手机联系人案例:
步骤:
[1]先读取raw_contacts表 读取contact_id字段 从而知道手机中有几条联系人
[2]在读取data表 根据raw_contact_id去读取data1列和mimetype_id
具体实现代码:
ReadContactUtils.java页面
package com.dahui.readcontact;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
public class ReadContactUtils {
public static List<Contact> readContact(Context context){
//[0]创建一个集合
List<Contact> contactLists = new ArrayList<Contact>();
//[1]由于联系人的数据库也是通过内容提供者暴露出来了 所以我想操作数据库直接使用内容提供者
//[2]先查询raw_contacts表 contact_id列
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
Uri dataUri = Uri.parse("content://com.android.contacts/data");
Cursor cursor = context.getContentResolver().query(uri, new String[] {"contact_id"}, null, null, null);
while(cursor.moveToNext()) {
String contact_id=cursor.getString(0);
//判断contact_id是否为空
if(contact_id!=null) {
System.out.println("contact_id:"+contact_id);
//创建javabean对象
Contact contact = new Contact();
contact.setId(contact_id);
//[3]根据raw_contact_id去查询data表 data1列和mimetype_id列
//小细节 查询的不是data表 查询的是view_data的视图
Cursor dataCursor = context.getContentResolver().query(dataUri, new String[]{"data1","mimetype"},"raw_contact_id=?", new String[] {contact_id}, null);
while(dataCursor.moveToNext()) {
String data1 = dataCursor.getString(0);
String mimetype = dataCursor.getString(1);
if ("vnd.android.cursor.item/name".equals(mimetype)) {
System.out.println("姓名:"+data1);
contact.setName(data1);
}else if("vnd.android.cursor.item/phone_v2".equals(mimetype)) {
System.out.println("电话:"+data1);
contact.setPhone(data1);
}else if("vnd.android.cursor.item/email_v2".equals(mimetype)) {
System.out.println("邮箱:"+data1);
contact.setEmail(data1);
}
}
//把javabean对象加入到集合中
contactLists.add(contact);
}
}
return contactLists;
}
}
Contact.java页面
package com.dahui.readcontact;
public class Contact {
private String id;
private String name;
private String email;
private String phone;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "Contact [id=" + id + ", name=" + name + ", email=" + email + ", phone=" + phone + "]";
}
}
MainActivity.java页面
package com.dahui.readcontact;
import java.util.List;
import android.app.Activity;
import android.content.Loader.ForceLoadContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<Contact> readContacts = ReadContactUtils.readContact(getApplicationContext());
for(Contact contact : readContacts) {
System.out.println("contact:"+contact);
}
}
}
运行截图:
使用内容解析者插入一条联系人案例:
MainActivity.java页面:
package com.dahui.insertcontact;
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends Activity {
private EditText et_name;
private EditText et_phone;
private EditText et_email;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_name = (EditText) findViewById(R.id.et_name);
et_phone = (EditText) findViewById(R.id.et_phone1);
et_email = (EditText) findViewById(R.id.et_email1);
}
public void click(View v) {
String name = et_name.getText().toString().trim();
String phone = et_phone.getText().toString().trim();
String email = et_email.getText().toString().trim();
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
Uri dataUri = Uri.parse("content://com.android.contacts/data");
//先查询一下rawcontacts表中有几条数据 行数+1就是contact_id的值
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
int count = cursor.getCount();
int contact_id = count + 1;
//把数据插入联系人数据库
ContentValues contentValues = new ContentValues();
contentValues.put("contact_id", contact_id);
getContentResolver().insert(uri, contentValues);
//把name 插入到data表中
ContentValues nameValus = new ContentValues();
nameValus.put("data1", name);//把数据插入data1列
nameValus.put("raw_contact_id", contact_id);//告诉数据库插入的联系人属于第几条数据
nameValus.put("mimetype", "vnd.android.cursor.item/name");//告诉数据库插入的联系人数据的类型
getContentResolver().insert(dataUri, nameValus);
//把phone 插入到data表中
ContentValues phoneValus = new ContentValues();
phoneValus.put("data1", phone);//把数据插入data1列
phoneValus.put("raw_contact_id", contact_id);//告诉数据库插入的联系人属于第几条数据
phoneValus.put("mimetype", "vnd.android.cursor.item/phone_v2");//告诉数据库插入的联系人数据的类型
getContentResolver().insert(dataUri, phoneValus);
//把email 插入到data表中
ContentValues emailValus = new ContentValues();
emailValus.put("data1", email);//把数据插入data1列
emailValus.put("raw_contact_id", contact_id);//告诉数据库插入的联系人属于第几条数据
emailValus.put("mimetype", "vnd.android.cursor.item/email_v2");//告诉数据库插入的联系人数据的类型
getContentResolver().insert(dataUri, emailValus);
}
}
activity_main.xml页面:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.dahui.insertcontact.MainActivity" >
<EditText
android:id="@+id/et_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入姓名"
/>
<EditText
android:id="@+id/et_phone1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入电话号码"
/>
<EditText
android:id="@+id/et_email1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入邮箱"
/>
<Button
android:onClick="click"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="插入联系人"
/>
</LinearLayout>