1、表结构如下:通讯录是存放在/data/data/com.android.providers.contacts/databases/contacts2.db,里面主要的表有:(1)raw_contacts:存放联系人的ID,_id属性为主键,声明为autoincrement,即不需要手动设置,其他属性也不需要手动设置就有默认值;display_name属性为姓名;(2)mimetypes:存放数据的类型,比如vnd.android.cursor.item/name表示“姓名”类型的数据,vnd.android.cursor.item/phone_v2表示“电话”类型的数据;(3)data:存放具
2、体的数据;raw_contact_id属性用来连接raw_contacts表,每条记录表示一个具体数据;我们主要的数据(email、phone等)都存放在data表;【成都android培训】data1属性存放总数据;data2属性:-如果此记录存放姓名,则data2存放名;-如果此记录存放电话,则data2存放类型,比如手机、家电;-如果此记录存放组织,则data2存放类型,比如公司、其他;-如果此记录存放地址,则data2存放类型,比如住宅,单位等;四、对通信录做增删改查简单的说:对通讯录操作就是对一个普通的ContentProvider操作;1.Query(1)根据电话号码查询姓名jav
3、a1. /根据电话号码查询姓名(在一个电话打过来时,如果此电话在通讯录中,则显示姓名)2. publicvoidtestReadNameByPhone()3. String phone =12345678;4. /uri= content:/com.android.contacts/data/phones/filter/#5. Uri uri = Uri.parse(content:/com.android.contacts/data/phones/filter/+phone);6. ContentResolver resolver =this.getContext().getContentR
4、esolver();7. Cursor cursor = resolver.query(uri,newStringData.DISPLAY_NAME,null,null);/从raw_contact表中返回display_name8. if(cursor.moveToFirst()9. Log.i(Contacts,+cursor.getString(0);10. 11. (2)查询所有的联系人1. /读取通讯录的全部的联系人2. /需要先在raw_contact表中遍历id,并根据id到data表中获取数据3. publictestReadAll()4. /uri = content:/co
5、m.android.contacts/contacts/com.android.contacts/contacts); /访问raw_contacts表StringData._ID,/获得_id属性8. while(cursor.moveToNext()9. StringBuilder buf =StringBuilder();10. intid = cursor.getInt(0);/获得id并且在data中寻找数据11. buf.append(id=+id);12. uri = Uri.parse(/com.android.contacts/contacts/+id+/data /如果要获
6、得data表中某个id对应的数据,则URI为content:/com.android.contacts/contacts/#/data13. Cursor cursor2 = resolver.query(uri,StringData.DATA1,Data.MIMETYPE,null,null,/data1存储各个记录的总数据,mimetype存放记录的类型,如电话、email等14. while(cursor2.moveToNext()15. String data = cursor2.getString(cursor2.getColumnIndex(data1);16. if(cursor
7、2.getString(cursor2.getColumnIndex(mimetype).equals()/如果是名字17. buf.append(,name=+data);18. 19. elseif(cursor2.getString(cursor2.getColumnIndex(/如果是电话20. buf.append(,phone=21. 22. elsevnd.android.cursor.item/email_v2/如果是email23. buf.append(,email=24. 25. elsevnd.android.cursor.item/postal-address_v2)
8、/如果是地址26. buf.append(,address=27. 28. elsevnd.android.cursor.item/organization/如果是组织29. buf.append(,organization=30. 31. 32. String str = buf.toString();33. Log.i(, str);34. 35. 2.Insert(1)一步一步添加数据1. /一步一步添加数据testAddContacts()3. /插入raw_contacts表,并获取_id属性4. Uri uri = Uri.parse(/com.android.contacts/r
9、aw_contacts5. ContentResolver resolver =6. ContentValues values =ContentValues();7. longcontact_id = ContentUris.parseId(resolver.insert(uri, values);8. /插入data表9. uri = Uri.parse(/com.android.contacts/data10. /add Name11. values.put(raw_contact_id, contact_id);12. values.put(Data.MIMETYPE,13. value
10、s.put(data2zdong14. values.put(xzdong15. resolver.insert(uri, values);16. values.clear();17. /add Phone18. values.put(19. values.put(Data.MIMETYPE,20. values.put(2/手机21. values.put(8765432122. resolver.insert(uri, values);23. values.clear();24. /add email25. values.put(26. values.put(Data.MIMETYPE,2
11、7. values.put(/单位28. values.put(xzdong29. resolver.insert(uri, values);(2)批量添加数据核心代码:(1)ContentProviderOperation operation = ContentProviderOperation.newInsert(uri).withValue(key,value).build();(2)resolver.applyBatch(authorities,operations);/批量提交span style=font-size:18px;publictestAddContactsInTrans
12、action()throwsException 2. Uri uri = Uri.parse(3. ContentResolver resolver =4. ArrayList operations =ArrayList();5. / 向raw_contact表添加一条记录6. /此处.withValue(account_name, null)一定要加,不然会抛NullPointerException7. ContentProviderOperation operation1 = ContentProviderOperation8. .newInsert(uri).withValue(null
13、).build();9. operations.add(operation1);10. / 向data添加数据11. uri = Uri.parse(12. /添加姓名13. ContentProviderOperation operation2 = ContentProviderOperation14. .newInsert(uri).withValueBackReference(0)15. /withValueBackReference的第二个参数表示引用operations0的操作的返回id作为此值16. .withValue()17. .withValue(18. operations
14、.add(operation2);19. /添加手机数据20. ContentProviderOperation operation3 = ContentProviderOperation21. .newInsert(uri).withValueBackReference(22. .withValue(23. .withValue().withValue(000000024. operations.add(operation3);25. resolver.applyBatch(com.android.contacts, operations);26. 3.Delete核心思想:(1)先在raw
15、_contacts表根据姓名查出id;(2)在data表中只要raw_contact_id匹配的都删除;1. publictestDelete()throwsException2. String name =3. /根据姓名求id6. Cursor cursor = resolver.query(uri,StringData._ID,display_name=?Stringname,7. if(cursor.moveToFirst()8. int9. /根据id删除data中的相应数据10. resolver.delete(uri,Stringname);12. resolver.delete
16、(uri,raw_contact_id=?Stringid+);13. 14. 4.Update(1)不需要更新raw_contacts,只需要更新data表;(2)uri=content:/com.android.contacts/data 表示对data表进行操作;testUpdate()throws2. intid =1;999999/对data表的所有数据操作7. values.put(, phone);8. resolver.update(uri, values,mimetype=? and raw_contact_id=?String,id+)9. view plaincopyspanstyle=font-family:KaiTi;16px;2. 主要的通讯录程序为ContactsProvider2.javaauthorities=contacts或com.android.contacts;四、编程提示URI对raw_contacts表添加、删除、更新操作:URI = /com.android.contacts/raw_contacts;对data表添加、删除、更新操作:/com.android.contacts/data;根据email对data表查询URI =conte
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1