Android开发系列(十一):对手机通讯录的读取、添加、删除、查找
来源:互联网 发布:php正则表达式语法 编辑:程序博客网 时间:2024/06/05 19:26
一、通讯录介绍通讯录是Android手机自带的一个应用,它是一个ContentProvider应用,其它应用可以对通讯录进行访问,进行对联系人的CRUD操作。二、通讯录数据库结构的介绍
首先,我们可以在File Explorer视图下找到contacts2.db文件,这是通讯录的文件
然后,我们用SQLite打开,分析下它的数据库结构:
raw_contacts表:
data表:
mimetypes表:
这三张表的结构介绍完了,接下来我们说下它们之间的联系:<喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+cmF3X2NvbnRhY3Rzse205rfFwarPtcjLtcS8x8K8SUSjutfWts7D+7PGysdfaWQ8L3A+CjxwPmRhdGGx7bTmt8XBqs+1yMu1xNDFz6Kjul9pZMrH1ve8/KOscmF3X2NvbnRhY3RzX2lkttTTpnJhd19jb250YWN0c7HttcRfaWSjrG1pbWV0eXBlX2lk19a2zrbU06a1xMrHbWltZXR5cGVzse21xF9pZDwvcD4KPHA+bWltZXR5cGVzse205rfFZGF0YbHttcTDv8z1vMfCvLXEyvTQ1KO6X2lkysfW97z8o6zOqjG1xMqxuvLKx2VtYWlswODQzTwvcD4KPHA+PGJyPgo8L3A+CjxoMT7I/aGiz9TKvqGizO2806Giyb6z/aGisunV0sGqz7XIy6O6PC9oMT4KPGgyPjGhorvxyKHL+dPQtcTBqs+1yMujujwvaDI+CjxwPjwvcD4KPHByZSBjbGFzcz0="brush:java;">public void testContacts() throws Exception{ Uri uri = Uri.parse("content://com.android.contacts/contacts"); //获得一个ContentResolver数据共享的对象 ContentResolver reslover = getContext().getContentResolver(); //取得联系人中开始的游标,通过content://com.android.contacts/contacts这个路径获得 Cursor cursor = reslover.query(uri, null, null, null, null); //上边的所有代码可以由这句话代替:Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); //Uri.parse("content://com.android.contacts/contacts") == ContactsContract.Contacts.CONTENT_URI while(cursor.moveToNext()){ //获得联系人ID String id = cursor.getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts._ID)); //获得联系人姓名 String name = cursor.getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts.DISPLAY_NAME)); //获得联系人手机号码 Cursor phone = reslover.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + id, null, null); StringBuilder sb = new StringBuilder("contactid=").append(id).append(name); while(phone.moveToNext()){ //取得电话号码(可能存在多个号码) int phoneFieldColumnIndex = phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); String phoneNumber = phone.getString(phoneFieldColumnIndex); sb.append(phoneNumber+"www"); } //建立一个Log,使得可以在LogCat视图查看结果 Log.i(TAG, sb.toString()); } }
2、查找联系人:
123456789101112//根据号码获取联系人的姓名
public
void
testContactNameByNumber()
throws
Exception{
String number =
"110"
;
Uri uri = Uri.parse(
"content://com.android.contacts/data/phones/filter/"
+number);
ContentResolver resolver = getContext().getContentResolver();
Cursor cursor = resolver.query(uri,
new
String[]{android.provider.ContactsContract.Data.DISPLAY_NAME},
null
,
null
,
null
);
if
(cursor.moveToFirst()){
String name = cursor.getString(
0
);
Log.i(TAG, name);
}
cursor.close();
}
3、添加联系人:
1234567891011121314151617181920212223242526272829//添加联系人
public
void
testAddContact()
throws
Exception{
Uri uri = Uri.parse(
"content://com.android.contacts/raw_contacts"
);
ContentResolver resolver = getContext().getContentResolver();
ContentValues values =
new
ContentValues();
long
contactid = ContentUris.parseId(resolver.insert(uri, values));
uri = Uri.parse(
"content://com.android.contacts/data"
);
//添加姓名
values.put(
"raw_contact_id"
, contactid);
values.put(Data.MIMETYPE,
"vnd.android.cursor.item/name"
);
values.put(
"data1"
,
"xiaoming"
);
resolver.insert(uri, values);
values.clear();
//添加电话
values.put(
"raw_contact_id"
, contactid);
values.put(Data.MIMETYPE,
"vnd.android.cursor.item/phone_v2"
);
values.put(
"data1"
,
"1234120155"
);
resolver.insert(uri, values);
values.clear();
//添加Email
values.put(
"raw_contact_id"
, contactid);
values.put(Data.MIMETYPE,
"vnd.android.cursor.item/email_v2"
);
values.put(
"data1"
,
"1234120155@qq.com"
);
resolver.insert(uri, values);
}
4、批量添加联系人(因为如果按照姓名、电话、Email的方式添加的话,其中一个环节出错,联系人也可以添加上去。但是批量的话就是一下子添加所有的)
1234567891011121314151617181920212223242526272829//批量添加
public
void
testAddContact2()
throws
Exception{
Uri uri = Uri.parse(
"content://com.android.contacts/raw_contacts"
);
ContentResolver resolver = getContext().getContentResolver();
ArrayList<contentprovideroperation> operations =
new
ArrayList<contentprovideroperation>();
ContentProviderOperation op1 = ContentProviderOperation.newInsert(uri)
.withValue(
"account_name"
,
null
)
.build();
operations.add(op1);
uri = Uri.parse(
"content://com.android.contacts/data"
);
//添加姓名
ContentProviderOperation op2 = ContentProviderOperation.newInsert(uri)
.withValueBackReference(
"raw_contact_id"
,
0
)
.withValue(
"mimetype"
,
"vnd.android.cursor.item/name"
)
.withValue(
"data2"
,
"李小龙"
)
.build();
operations.add(op2);
//添加电话号码
ContentProviderOperation op3 = ContentProviderOperation.newInsert(uri)
.withValueBackReference(
"raw_contact_id"
,
0
)
.withValue(
"mimetype"
,
"vnd.android.cursor.item/phone_v2"
)
.withValue(
"data1"
,
"1234120155"
)
.withValue(
"data2"
,
"2"
)
.build();
operations.add(op3);
resolver.applyBatch(
"com.android.contacts"
, operations);
}</contentprovideroperation></contentprovideroperation>
5、删除联系人:
1234567891011121314public
void
testDelete()
throws
Exception{
String name =
"李小龙"
;
//根据姓名求id
Uri uri = Uri.parse(
"content://com.android.contacts/raw_contacts"
);
ContentResolver resolver =
this
.getContext().getContentResolver();
Cursor cursor = resolver.query(uri,
new
String[]{Data._ID},
"display_name=?"
,
new
String[]{name},
null
);
if
(cursor.moveToFirst()){
int
id = cursor.getInt(
0
);
//根据id删除data中的相应数据
resolver.delete(uri,
"display_name=?"
,
new
String[]{name});
uri = Uri.parse(
"content://com.android.contacts/data"
);
resolver.delete(uri,
"raw_contact_id=?"
,
new
String[]{id+
""
});
}
}
- 上一篇:android 自定义键盘 KeyboardView的key 文字颜色发虚模糊
- 下一篇:OpenCV4Android开发 人脸识别篇
- Android开发系列(十一):对手机通讯录的读取、添加、删除、查找
- Android开发系列(十一):对手机通讯录的读取、添加、删除、查找
- Android手机通讯录的读取、添加、删除、查找
- android从零单排之手机通讯录的读取、添加、删除、查找
- android读取手机通讯录
- android 读取手机通讯录
- android对手机通讯录的操作
- Android读取手机通讯录实现
- Android 2.1读取手机通讯录
- Android读取手机通讯录实现
- Android读取手机通讯录实现
- Android 读取手机通讯录内容
- Android 手机通讯录开发时给联系人添加头像失败的坑
- 关于android读取手机通讯录的原有分组
- 【通讯录系统】:实现一个通讯录(可添加、删除、修改、查找、显示、清空、排序)
- ios开发手机通讯录系列功能遇到的bug
- Android通讯录联系人的读取、更新、插入、删除等方法
- android 读取手机通讯录并显示listview
- php中使用exec,system等函数调用系统命令
- Android学习笔记(一)
- Java IO详解
- bzoj 1803(主席树)
- ClassLoader:类加载详解
- Android开发系列(十一):对手机通讯录的读取、添加、删除、查找
- pat 1067 Sort with Swap(0,*) (25)
- 回归假设
- 文件的创建
- IPC机制之使用ContentProvider
- thinkphp自定义模板标签(一)
- SGI STL的空间配置器alloc
- 浅析设计模式之观察者模式
- (java) Populating Next Right Pointers in Each Node