android中ContentProvider实现联系人的读取和插入

这篇博客介绍了如何在Android中使用ContentProvider获取和插入手机联系人。首先,通过getContentResolver获取ContentResolver对象,然后利用query方法读取联系人,通过uri、projection、selectionArgs和sortOrder设置查询条件。接着,使用ContentValues存储要插入的联系人信息,并通过ContentResolver的insert方法添加新的联系人记录。最后,展示了如何清除并填充ContentValues以插入更多联系人信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ContentProvider是android四大组件中的一中,平时我们可以通过ContentProvider来获取手机的一些内容,比如:手机联系人,短息,多媒体信息等,今天我学习了ContentProvider获取手机联系人,现在这里分享一下学习的一些心得体会

首先我们可以通过getContentResolver()来获取一个ContentResolver对象,这样我们就可以对contentProvider进行操作

ContentResolver cr=getContentResolver();

我们先来看一下,读取联系人如何操作

cr.query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder);解释一下这里面的几个参数,通过    uri   可以确定你要选择的是ContentProvider什么类型的数据,是联系人或者短息或者其他的,   projection   代表了你要获取那些内容比如联系人姓名、电话。。。,  selectionArgs  表示选择的条件,通过这个条件来筛选,  sortOrder 是对返回的结果进行排序,cr.query()返回的是一个Cursor对象;

例:Cursor cs=cr.query(Contacts.CONTENT_URI, new String[]{Contacts._ID,Contacts.DISPLAY_NAME}, null, null, null);

之后的操作就很简单了,就是操作Cursor来获取你想要的信息,这里只是将手机联系人打印了出来

if (cs!=null) {
while (cs.moveToNext()) {
//先获取联系人的id
int id=cs.getInt(cs.getColumnIndex(Contacts._ID));
String name=cs.getString(cs.getColumnIndex(Contacts.DISPLAY_NAME));
System.out.println("id="+id);
System.out.println("name="+name);
//通过联系人的id来获取联系人的号码和邮箱,通过条件Phone.CONTACT_ID+"="+id来获取对应的联系人
Cursor cs2=cr.query(Phone.CONTENT_URI, new String[]{Phone.NUMBER,Phone.TYPE}, Phone.CONTACT_ID+"="+id, null, null);
if (cs2!=null) {
while (cs2.moveToNext()) {
int type=cs2.getInt(cs2.getColumnIndex(Phone.TYPE));
if (type==Phone.TYPE_HOME) {
System.out.println("家庭电话:"+cs2.getString(cs2.getColumnIndex(Phone.NUMBER)));
}else if (type==Phone.TYPE_MOBILE) {
System.out.println("手机电话:"+cs2.getString(cs2.getColumnIndex(Phone.NUMBER)));
}
}
cs2.close();
}
Cursor cs3=cr.query(Email.CONTENT_URI, new String[]{Email.DATA}, Email.CONTACT_ID+"="+id, null, null);
if (cs3!=null) {
while (cs3.moveToNext()) {
System.out.println("邮箱地址:"+cs3.getString(cs3.getColumnIndex(Email.DATA)));
}
//注意要释放cursor对象
cs3.close();
}
}
//注意要释放cursor对象
cs.close();
}

接下来,往手机通讯录里添加一条联系人的信息,添加信息,需要用到Contentvalues来存放要插入的信息

同样,先获取ContentResolver cr=getContentResolver();

ContentValues values=new ContentValues();

//先给联系人插入一个序列号之类的东西,insert方法返回的不再是一个Cursor对象, 而是一个URi对象
 Uri uri=cr.insert(RawContacts.CONTENT_URI, values);

要插入数据,首先我们要获取到要插入联系人的序列号,通过

long row_id=ContentUris.parseId(uri);//返回的就是要插入联系人的行id,后面插入其他的信息,都是通过这个来插入的

比如插入姓名和类型

values.clear();//这里还使用上面的ContentValues ,clear一下就行了

//插入联系人姓名
       values.put(StructuredName.RAW_CONTACT_ID, row_id);
        values.put(StructuredName.DISPLAY_NAME, "张三");
        values.put(StructuredName.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
        uri=cr.insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
//插入联系人号码
        values.clear();
        values.put(Phone.RAW_CONTACT_ID, row_id);
        values.put(Phone.NUMBER, "13134613145");
        values.put(Phone.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
        uri=cr.insert(android.provider.ContactsContract.Data.CONTENT_URI, values);


执行完上面的代码,就可以插入一条只有号码的联系人

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值