使用Provider与Resolver读取系统联系人并插入联系人
来源:互联网 发布:ubuntu 14.04 配置ip 编辑:程序博客网 时间:2024/05/19 03:41
读取系统联系人
1.系统联系人源码
类
packages/providers/ContactsProvider2
首先看清单 --- authority
<provider android:name="ContactsProvider2"
android:authorities="contacts;com.android.contacts"
权限
android:readPermission="android.permission.READ_CONTACTS"
android:writePermission="android.permission.WRITE_CONTACTS">
再看类 --- 获取Uri
UriMatcher
matcher.addURI(ContactsContract.AUTHORITY, "raw_contacts", RAW_CONTACTS);
matcher.addURI(ContactsContract.AUTHORITY, "raw_contacts/#/data", RAW_CONTACTS_DATA);
2.数据库的位置
/data/data/com.android.providers.contacts/databases/contacts2.db
3.重要的表
contacts
raw_contacts
data
mimetypes
一般看后三张表
详细:
data中存放联系人的 姓名、手机号、邮箱、地址等。
mimetypes中存放data对应字段mimetype的信息。
如:mimetype_id 5对应联系人电话
raw_contacts中存放data对应字段raw_contact_id,_id表示每一个练习人的id
data表中字段与对应的表
mimetype mimetypes
raw_contact_id raw_contacts
4.查询步骤
1) 查询raw_contacts表
获取_id --- 每一个_id代表一个联系人
uri --- content://com.android.contacts/raw_contacts
2) 查询data
uri --- content://com.android.contacts/raw_contacts/_id/data
遍历每一个_id(while循环),raw_contacts表中_id对应data表中的raw_contact_id。
即查询data表中的每一个raw_contact_id,查询出字段为data1, mimetype 字段,
判断mimetype,并将相应数据封装到bean中。
1.系统联系人源码
类
packages/providers/ContactsProvider2
首先看清单 --- authority
<provider android:name="ContactsProvider2"
android:authorities="contacts;com.android.contacts"
权限
android:readPermission="android.permission.READ_CONTACTS"
android:writePermission="android.permission.WRITE_CONTACTS">
再看类 --- 获取Uri
UriMatcher
matcher.addURI(ContactsContract.AUTHORITY, "raw_contacts", RAW_CONTACTS);
matcher.addURI(ContactsContract.AUTHORITY, "raw_contacts/#/data", RAW_CONTACTS_DATA);
2.数据库的位置
/data/data/com.android.providers.contacts/databases/contacts2.db
3.重要的表
contacts
raw_contacts
data
mimetypes
一般看后三张表
详细:
data中存放联系人的 姓名、手机号、邮箱、地址等。
mimetypes中存放data对应字段mimetype的信息。
如:mimetype_id 5对应联系人电话
raw_contacts中存放data对应字段raw_contact_id,_id表示每一个练习人的id
data表中字段与对应的表
mimetype mimetypes
raw_contact_id raw_contacts
4.查询步骤
1) 查询raw_contacts表
获取_id --- 每一个_id代表一个联系人
uri --- content://com.android.contacts/raw_contacts
2) 查询data
uri --- content://com.android.contacts/raw_contacts/_id/data
遍历每一个_id(while循环),raw_contacts表中_id对应data表中的raw_contact_id。
即查询data表中的每一个raw_contact_id,查询出字段为data1, mimetype 字段,
判断mimetype,并将相应数据封装到bean中。
注意:其实查询了两张表:mimetypes与data,因为如果输出字段名,可以看到mimetype而非mimetype_id
5.插入步骤
1)向 raw_contacts表中插入_id
uri --- content://com.android.contacts/raw_contacts
2)向 data表中插入数据
uri --- content://com.android.contacts/data
public class MainActivity extends Activity {private ContentResolver resolver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}/** * 查询所有联系人 * * @param v */public void query(View v) {resolver = getContentResolver();// 联系人集合List<ContactInfo> infos = new ArrayList<ContactInfo>();// 查询raw_contants表中_id字段,每个_id对应一个联系人Cursor cursor = resolver.query(Uri.parse("content://com.android.contacts/raw_contacts"),new String[] { "_id" }, null, null, null);while (cursor.moveToNext()) {// 联系人ContactInfo info = new ContactInfo();int _id = cursor.getInt(cursor.getColumnIndex("_id"));info._id = _id;// 根据_id查询data表中的data1和mimetype字段的值Cursor c = resolver.query(Uri.parse("content://com.android.contacts/raw_contacts/"+ _id + "/data"), null, null, null, null);while (c.moveToNext()) {// 其实查询了两张表:mimetypes与data,因为如果输出字段名,可以看到mimetype// 而非mimetype_idString data = c.getString(c.getColumnIndex("data1"));String mimetype = c.getString(c.getColumnIndex("mimetype"));if ("vnd.android.cursor.item/name".equals(mimetype)) {// 联系人姓名info.name = data;} else if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {// 联系人手机号info.phone = data;} else if ("vnd.android.cursor.item/email_v2".equals(mimetype)) {// 联系人邮箱info.email = data;}}// 将联系人添加到集合infos.add(info);c.close();}cursor.close();for (ContactInfo contactInfo : infos) {System.out.println(contactInfo);}}/** * 插入联系人 * * @param v */public void insert(View v) {resolver = getContentResolver();// 向raw_contacts表中插入_idContentValues values = new ContentValues();Uri uri = resolver.insert(Uri.parse("content://com.android.contacts/raw_contacts"),values);// 通过uri获取_idlong _id = ContentUris.parseId(uri);// 向data表中插入数据// 插入姓名values.clear();values.put("raw_contact_id", _id);values.put("data1", "xixi");values.put("mimetype", "vnd.android.cursor.item/name");resolver.insert(Uri.parse("content://com.android.contacts/data"),values);// 插入手机号values.clear();values.put("raw_contact_id", _id);values.put("data1", "123456");values.put("mimetype", "vnd.android.cursor.item/phone_v2");resolver.insert(Uri.parse("content://com.android.contacts/data"),values);// 插入邮箱values.clear();values.put("raw_contact_id", _id);values.put("data1", "123456@qq.com");values.put("mimetype", "vnd.android.cursor.item/email_v2");resolver.insert(Uri.parse("content://com.android.contacts/data"),values);}}
0 0
- 使用Provider与Resolver读取系统联系人并插入联系人
- Android 选择系统联系人并读取联系人数据
- Android------读取并选择系统联系人数据
- 利用provider获取系统联系人
- Content Provider的使用---联系人
- ContentProvider 读取系统联系人
- 读取系统联系人
- Android 读取系统联系人
- 读取系统的联系人
- 读取系统联系人
- 读取系统联系人
- 使用ContentProvider读取系统联系人信息
- 利用Contacts Provider读取手机联系人信息
- 如何使用contentrsolver读取系统中的联系人,并添加到sd中
- ContentResolver读取系统联系人数据
- 使用Content Provider得到联系人信息
- 使用Content Provider得到联系人信息
- 使用Content Provider得到联系人信息实例
- BootStrap less基础语法
- form表单中get与post的区别
- ios7新特性nsurlsession初探
- __v7_setup
- Android APP 登陆模块
- 使用Provider与Resolver读取系统联系人并插入联系人
- boost 学习总结
- 豪华版飞机大战系列(三)
- 【最短路】 codeforces 449B Jzzhu and Cities
- OCP 1Z0 053 179
- android-awesome-resource
- UIScrollView paging
- wxwidgets中分解GIF动画图片并显示播放
- leedcode做题总结,题目Reverse Integer----- 2011/12/25