博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
contentProvider-联系人的CURD
阅读量:4654 次
发布时间:2019-06-09

本文共 3794 字,大约阅读时间需要 12 分钟。

1.联系人的查找

返回一个ArrayList<HashMap<String,  String>>类型

//通过管理联系人的URI获取游标对象        Cursor cursor= getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);        ArrayList
> contactData = new ArrayList
>(); while (cursor.moveToNext()) { String contactId=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); String contactName=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)).trim(); String contactPhone=null; //通过管理联系人电话的URI获取游标对象 Cursor cursorForPhone=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"="+contactId, null, null); if(cursorForPhone.moveToFirst()){ contactPhone=cursorForPhone.getString(cursorForPhone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)).replaceAll(" ", ""); } cursorForPhone.close(); //删除无效联系人 if(contactPhone==null){ int id=getContentResolver().delete(ContactsContract.RawContacts.CONTENT_URI, ContactsContract.Contacts._ID+"="+contactId, null); Toast.makeText(contactList.this,"无效联系人"+contactName+"已清空"+id, Toast.LENGTH_SHORT).show(); continue; } HashMap
contact=new HashMap
(); contact.put("uid", contactId); contact.put("name", contactName); contact.put("phone", contactPhone); contactData.add(contact); } cursor.close(); return contactData;

 

以上demo也包含了联系人的删除

2.联系人的添加

String contactName=name.getText().toString().trim();        String contactPhone=phone.getText().toString().trim();        ArrayList
operation=new ArrayList
(); //在raw_contacts主表中添加一条数据 ContentProviderOperation op1= ContentProviderOperation.newInsert(RawContacts.CONTENT_URI) .withValue("account_id", null) .build(); operation.add(op1); //在data表中添加一条联系人姓名类型的数据 ContentProviderOperation op2= ContentProviderOperation.newInsert(Data.CONTENT_URI) .withValueBackReference(Data.RAW_CONTACT_ID, 0) .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) .withValue(StructuredName.GIVEN_NAME, contactName) .build(); operation.add(op2); //在data表中添加一条电话类型的数据 ContentProviderOperation op3= ContentProviderOperation.newInsert(Data.CONTENT_URI) .withValueBackReference(Data.RAW_CONTACT_ID, 0) .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) .withValue(Phone.NUMBER, contactPhone) .withValue(Phone.TYPE, Phone.TYPE_MOBILE) .build(); operation.add(op3); try{ //执行上面的操作,该方法会开启事务 getContentResolver().applyBatch("com.android.contacts", operation); Toast.makeText(AddContact.this, "添加成功!", Toast.LENGTH_SHORT).show(); } catch (RemoteException | OperationApplicationException e) { e.printStackTrace(); }

对于联系人的操作,其实是对于data/data/com.android.providers.contacts/databases/contacts2.db的操作

主要需要了解的几张表:contacts,raw_contacts,data,mimetype,对于通话记录的操作,则需要该文件下的calls等表操作。

涉及到的URI:

Contacts.CONTENT_URI

  对应contacts表,主要是联系人的主要信息

    以上的图只截取了部分内容

Data.CONTENT_URI

对应data表中的数据

 

    上图中可以看出有些phone数据类型错误,成了name类型,这也是之前电话号码不显示的原因

CommonDataKinds.Phone.CONTENT_URI

  对应的是data表中,类型为电话号码的数据

 

CommonDataKinds.Email.CONTENT_URI

  对应的是data表中,类型为电话号码的数据

 

RawContacts.CONTENT_URI

  对应raw_contacts表中的数据

这个只是android中ContentProvider的一个应用,还有许多应用也通过ContentProvider共享了它们的数据

转载于:https://www.cnblogs.com/rw-rongwei/p/4432917.html

你可能感兴趣的文章
快速排序算法
查看>>
9.Redis 有序集合(sorted set)
查看>>
ios高阶教程 块对象(block)的利用
查看>>
tomcat项目的部署
查看>>
SQLServer2012通过链接服务器执行SQLServer2000的存储过程的问题
查看>>
C语言-06复杂数据类型-01数组
查看>>
查看Python、flask 版本
查看>>
同余方程 2012年NOIP全国联赛提高组
查看>>
vue 图片预览插件
查看>>
深入解析:分布式系统的事务处理经典问题及模型
查看>>
python的2种字符串格式化输出
查看>>
Netsharp快速入门(之14) 销售管理(报表A 热销滞销品统计)
查看>>
配置 SQL Server Email 发送以及 Job 的 Notification通知功能
查看>>
线上应用bug跟踪查找-友盟统计
查看>>
07 数据结构
查看>>
docker学习(一)
查看>>
django.db.migrations.exceptions.InconsistentMigrationHistory django报错
查看>>
linux shell编程指南第十八章------控制流结构
查看>>
iOS设备信息
查看>>
<每日一题>题目12:列表解析及zip、dict函数的简单应用
查看>>