1. 手机联系人数据库:data/data/com.android.provides.contacts/databases
------两个表:raw_contacts表和data表------关联表
2. 查询:
a. 去raw_contacts表中取所有联系人的_id
b. 去data表中根据上面取到的_id查询对应id的数据.
3. 添加
a. 在raw_contacts表中添加一个记录
b. 根据上面添加记录的id, 取data表中添加三条数据
1. 查看联系人的内容提供者的uri:Android源码—packages—providers—(根据应用包名找)ContactsProvider—把文件夹导入 eclipse(Import Projects)
源码中找—清单文件中找Provider;
3. 查询raw_contacts表 的uri:content://com.android.contacts/raw_contacts
查询data表的uri: content://com.android.contacts/data
4. 读SD卡权限;
1.输出cursor的方法,把cursor所有内容输出
//输出cursor的方法,把cursor所有内容输出
private void printCursor(Cursor cursor) {
if(cursor != null && cursor.getCount() > 0) {
while(cursor.moveToNext()) {
int columnCount = cursor.getColumnCount(); // 列的总数
for (int i = 0; i < columnCount; i++) {
String columnName = cursor.getColumnName(i); // 取对应i位置的列的名称
String columnValue = cursor.getString(i); // 取出对应i位置的列的值
Log.i(TAG, "当前是第" + cursor.getPosition() + "行: " + columnName + " = " + columnValue);
}
}
cursor.close();
}
}
2.查询联系人
public void queryContacts(View v) {
// 1. 去raw_contacts表中取所有联系人的_id
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
Uri dataUri = Uri.parse("content://com.android.contacts/data");
Cursor cursor = getContentResolver().query(uri, new String[]{"_id"}, null, null, null);//只要_id列的内容,第二个参数为列名
// printCursor(cursor);
// 以下是取出只有_id的cursor
if(cursor != null && cursor.getCount() > 0) {
while(cursor.moveToNext()) {
int id = cursor.getInt(0); //只有一个列,所以getInt(0)为id;
// 2. 去data表中根据上面取到的_id查询对应id的数据.
String selection = "raw_contact_id = ?"; //选择条件
String[] selectionArgs = {String.valueOf(id)};//选择条件,如果raw_contact_id =id
Cursor c = getContentResolver().query(dataUri, new String[]{"data1", "mimetype"},
selection, selectionArgs, null); //第二个参数为列名,把mimetype_id变成mimetype;第三,第四为选择条件
if(c != null && c.getCount() > 0) {
while(c.moveToNext()) {
String mimetype = c.getString(1); // 当前取的是mimetype的值
String data1 = c.getString(0); // 当前取的是data1数据
if("vnd.android.cursor.item/phone_v2".equals(mimetype)) {//如果等于手机号
Log.i(TAG, "号码: " + data1);
} else if("vnd.android.cursor.item/name".equals(mimetype)) {//如果等于姓名
Log.i(TAG, "姓名: " + data1);
} else if("vnd.android.cursor.item/email_v2".equals(mimetype)) {//如果等于邮箱
Log.i(TAG, "邮箱: " + data1);
}
}
c.close();
}
}
cursor.close();
}
}
3.添加联系人
public void addContacts(View v) {
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
Uri dataUri = Uri.parse("content://com.android.contacts/data");
// 1. 在raw_contacts表中添加一个记录
// 取raw_contacts表中contact_id的值
Cursor cursor = getContentResolver().query(uri, new String[]{"contact_id"}, null, null, "contact_id desc limit 1");
if(cursor != null && cursor.moveToFirst()) {
int contact_id = cursor.getInt(0);
contact_id ++;
cursor.close();
ContentValues values = new ContentValues();
values.put("contact_id", contact_id);
getContentResolver().insert(uri, values);
// 2. 根据上面添加记录的id, 取data表中添加三条数据
// 存号码
values = new ContentValues();
values.put("mimetype", "vnd.android.cursor.item/phone_v2");
values.put("data1", "10086");
values.put("raw_contact_id", contact_id);
getContentResolver().insert(dataUri, values);
// 存姓名
values = new ContentValues();
values.put("mimetype", "vnd.android.cursor.item/name");
values.put("data1", "中国移动");
values.put("raw_contact_id", contact_id);
getContentResolver().insert(dataUri, values);
// 存姓名
values = new ContentValues();
values.put("mimetype", "vnd.android.cursor.item/email_v2");
values.put("data1", "10086@kengni.com");
values.put("raw_contact_id", contact_id);
getContentResolver().insert(dataUri, values);
}
}