操作系统的ContentProvider 读写联系人
来源:互联网 发布:mac app store 没反应 编辑:程序博客网 时间:2024/06/05 07:38
1.获取联系人
调用系统提供的contentProvider
raw_contacts 表
contact_id 存放联系人的id
data 表
这个表是用来存储所有的联系人的详细信息的
一个联系人的信息可能分为多条数据
其中比较重要的地段是数据类型,联系人id,还有数据内容。
其中有一个字段mime_type是数据的类型(电话,邮箱,名字
等等)
mimetypes 表
就是联系人所有的数据类型选项
看源码可以看出contentProvider有两个Uri,两个都是可以用
的,但是在4.0之后。只能使用分号后面的Uri
该路径是向低版本兼容的
如果要获取联系人的数据,该怎么做?
1.获取所有的联系人的id
2.根据id查询到这个联系人的所有的数据消息
读取联系人的权限
<uses-permission android:name="android.permission.READ_CONTACTS" />
//在这里进行联系人的获取 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 // <uses-permission android:name="android.permission.READ_CONTACTS"/>}
2.向系统插入联系人
1、先去 raw_contacts 表中添加 id;
2、然后借助 id 去 data 表中添加各种信息。
写入联系人的权限
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
ContentResolver cr = getContentResolver();//先查询 raw_contacts 表,获取最新联系人的主键,然后主键+1,就是要插入的联系人的 idCursor cursorId = cr.query(Uri.parse("content://com.android.contacts/raw_contacts"), new String[]{"_id"},null,null,null);//默认联系人 id 就是 1int 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", "888888888");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);cursorId.close();Toast.makeText(MainActivity.this,"插入数据成功",Toast.LENGTH_SHORT).show();
0 0
- 操作系统的ContentProvider 读写联系人
- 12 操作系统contentprovider的联系人
- Android中ContentProvider实现联系人的读写
- ContentProvider之读写联系人
- Android学习笔记十七.使用ContentProvider实现数据共享(四).操作系统(联系人)的ContentProvider
- 本地联系人的ContentProvider
- 基础总结篇:ContentProvider之读写联系人
- 利用ContentProvider机制读写联系人信息。
- ContentProvider读写联系人列表以及权限处理
- 基础总结篇:ContentProvider之读写联系人
- ContentProvider---基础总结篇之六:ContentProvider之读写联系人 .
- Android--操作联系人的ContentProvider
- 基础总结篇之六:ContentProvider之读写联系人
- 基础总结篇之六:ContentProvider之读写联系人
- 基础总结篇之六:ContentProvider之读写联系人
- 基础总结篇之六:ContentProvider之读写联系人
- android基础总结篇之六:ContentProvider之读写联系人
- 基础总结篇之六:ContentProvider之读写联系人
- 面试题21:包含min函数的栈
- php发送邮件email
- iOS动画(Core Animation)总结
- 文章标题
- 在Visual Studio 2015中使用Git
- 操作系统的ContentProvider 读写联系人
- Linux下RTL8723BE无线网卡驱动问题解决方法
- 使用 ShellExecuteEx 显示文件属性
- PAT 1057 Stack (30) (树状数组+二分 典型题)
- 遍历给定目录并将特定文件的名字写入文件
- JNDI到底是什么,有什么作用
- 思想随笔(四)我为什么而活着(续)
- HDU1019(基础题)
- 瀑布流ul带图片版