运用contentProvider访问联系人—Button1
contentProvider添加联系人—Button2
package com.lanou.user.android2lesson_06_systemcontentprovider;
public class MainActivity extends AppCompatActivity {
/**
* 调用系统提供的contentProvider
* 今天已获取联系人为例
* 系统在写联系人这个APP的时候,就已经提供好了一个联系人的contentProvider
* 看一下系统提供的联系人数据库
* <p/>
* 源码里面都有,我们看截图
* raw_contacts表
* contact_id 存放联系人的id
* <p/>
* data表
* 这个表是用来存储所有联系人的详细信息的
* 一个联系人的信息可能分为多条数据
* 其中比较重要的字段是数据类型,联系人id,还有数据内容
* <p/>
* 其中有一个字段mime_type是数据的类型,(电话、邮箱、名字等)
* <p/>
* mime_type表
* 就是联系人所有的数据类型选项
* <p/>
* 看源码可以看出contentProvider有两个Uri,两个都是可以用的,但是,在4.0之后,只能使用分好后面的Uri,该路径是
* <p/>
* <p/>
* 如果要获取联系人的数据,怎么做?
* 1、获取所有人的联系id
* 2、根据id查询到这个联系人
*/
private Button getContects;
private Button setContects;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getContects = (Button) findViewById(R.id.main_getContects);
setContects = (Button) findViewById(R.id.main_setContects);
getContects.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//在这里进行联系人的获取
ContentResolver cr = getContentResolver();
//1.获取所有联系人的id
Cursor cursorID = cr.query(Uri.parse("content://com.android.contacts/raw_contacts"), new String[]{"contact_id"}, null, null, null);
if (cursorID.getCount() == 0) {
Toast.makeText(MainActivity.this, "没有联系人", Toast.LENGTH_SHORT).show();
return;
}
//2.根据id获取到每一个联系人的所有信息
while (cursorID.moveToNext()) {
//拿到id的字符串
String contactid = cursorID.getString(cursorID.getColumnIndex("contact_id"));
//根据id去data数据库里查询联系人的所有信息
Cursor contactData = cr.query(Uri.parse("content://com.android.contacts/data"), new String[]{"data1", "mimetype"}, "raw_contact_id=?", new String[]{contactid}, null);
//遍历获取联系人信息
while (contactData.moveToNext()) {
//拿到数据内容
String data1 = contactData.getString(contactData.getColumnIndex("data1"));
//拿到数据类型
String mimetype = contactData.getString(contactData.getColumnIndex("mimetype"));
if ("vnd.android.cursor.item/email_v2".equals(mimetype)) {
Log.i("邮箱", data1);
} else if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {
Log.i("手机:", data1);
} else if ("vnd.android.cursor.item/name".equals(mimetype)) {
Log.i("名字:", data1);
}
}
//关闭游标对象,释放内存
contactData.close();
}
//关闭游标对象,释放内存
cursorID.close();
//3.添加权限,允许读取ContentProvider
}
});
给系统添加联系人
/**
* 插入联系人
*
*/
setContects.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
/*通过上面分析,我们想要插入联系人,就需要如下的操作:
1、先去 raw_contacts 表中添加 id;
2、然后借助 id 去 data 表中添加各种信息。
*/
ContentResolver cr = getContentResolver();
//先查询 raw_contacts 表,获取最新联系人的主键,然后主键+1,就是要插入的联系人的 id
Cursor cursorId = cr.query(Uri.parse("content://com.android.contacts/raw_contacts"),
new String[]{"_id"}, null, null, null);
//默认联系人 id 就是 1
int contact_id = 1;
if (cursorId.moveToLast()) {
//拿到主键
int _id = cursorId.getInt(cursorId.getColumnIndex("_id")); //主键+1,就是要插入的联系人
contact_id = ++_id;
}
//把 contact_id 添加到 raw_contacts 表中
ContentValues values = new ContentValues();
values.put("contact_id", contact_id);
cr.insert(Uri.parse("content://com.android.contacts/raw_contacts"), values);
//清空 ContentValues 插入姓名
values.clear();
values.put("data1", "小明");
values.put("mimetype", "vnd.android.cursor.item/name");
values.put("raw_contact_id", contact_id);
cr.insert(Uri.parse("content://com.android.contacts/data"), values);
//清空 ContentValues 插入电话
values.clear();
values.put("data1", "7966888");
values.put("mimetype", "vnd.android.cursor.item/phone_v2");
values.put("raw_contact_id", contact_id);
cr.insert(Uri.parse("content://com.android.contacts/data"), values);
//清空 ContentValues 插入邮箱
values.clear();
values.put("data1","79845430@qq.com");
values.put("mimetype","vnd.android.cursor.item/email_v2");
values.put("raw_contact_id",contact_id);
cr.insert(Uri.parse("content://com.android.contacts/data"), values);
cursorId.close();
ContentResolver cr1 = getContentResolver();
//先查询 raw_contacts 表,获取最新联系人的主键,然后主键+1,就是要插入的联系人的 id
Cursor cursorId1 = cr1.query(Uri.parse("content://com.android.contacts/raw_contacts"),
new String[]{"_id"}, null, null, null);
int contact_sid = 2;
if (cursorId1.moveToLast()) {
//拿到主键
int _id = cursorId1.getInt(cursorId1.getColumnIndex("_id")); //主键+1,就是要插入的联系人
contact_sid = ++_id;
}
//把 contact_id 添加到 raw_contacts 表中
ContentValues values1 = new ContentValues();
values1.put("contact_id", contact_sid);
cr1.insert(Uri.parse("content://com.android.contacts/raw_contacts"), values1);
//清空 ContentValues 插入姓名
values1.clear();
values1.put("data1", "小红");
values1.put("mimetype", "vnd.android.cursor.item/name");
values1.put("raw_contact_id", contact_sid);
cr1.insert(Uri.parse("content://com.android.contacts/data"), values1);
//清空 ContentValues 插入电话
values1.clear();
values1.put("data1", "7966999");
values1.put("mimetype", "vnd.android.cursor.item/phone_v2");
values1.put("raw_contact_id", contact_sid);
cr1.insert(Uri.parse("content://com.android.contacts/data"), values1);
//清空 ContentValues 插入邮箱
values1.clear();
values1.put("data1","39845430@qq.com");
values1.put("mimetype","vnd.android.cursor.item/email_v2");
values1.put("raw_contact_id",contact_sid);
cr1.insert(Uri.parse("content://com.android.contacts/data"), values1);
cursorId1.close();
Toast.makeText(MainActivity.this, "插入联系人成功", Toast.LENGTH_SHORT).show();
;
}
});
}
}
注意:记住加权限在Manifest.xml
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
原文:http://blog.csdn.net/glm_970414161/article/details/51884917