Java代码
  1. package cn.itcast.contact;
  2. import java.util.ArrayList;
  3. import android.content.ContentProviderOperation;
  4. import android.content.ContentProviderResult;
  5. import android.content.ContentResolver;
  6. import android.content.ContentUris;
  7. import android.content.ContentValues;
  8. import android.database.Cursor;
  9. import android.net.Uri;
  10. import android.provider.ContactsContract;
  11. import android.provider.ContactsContract.RawContacts;
  12. import android.provider.ContactsContract.CommonDataKinds.Email;
  13. import android.provider.ContactsContract.CommonDataKinds.Phone;
  14. import android.provider.ContactsContract.CommonDataKinds.StructuredName;
  15. import android.provider.ContactsContract.Contacts.Data;
  16. import android.test.AndroidTestCase;
  17. import android.util.Log;
  18. public class ContactTest extends AndroidTestCase {
  19. private static final String TAG = "ContactTest";
  20. public void testGetAllContact() throws Throwable{
  21. Uri uri = ContactsContract.Contacts.CONTENT_URI;
  22. ContentResolver contentResolver = this.getContext().getContentResolver();
  23. Cursor cursor = contentResolver.query(uri, null, null, null, null);
  24. while(cursor.moveToNext()){
  25. StringBuilder sb = new StringBuilder();
  26. String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
  27. String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
  28. sb.append("contactId=").append(contactId).append(",name=").append(name);
  29. Cursor phones = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
  30. null,
  31. ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,
  32. null, null);
  33. while(phones.moveToNext()){
  34. String phoneNumber = phones.getString(phones.getColumnIndex(
  35. ContactsContract.CommonDataKinds.Phone.NUMBER));
  36. sb.append(",phone=").append(phoneNumber);
  37. }
  38. phones.close();
  39. Cursor emails = contentResolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
  40. null,
  41. ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId,
  42. null, null);
  43. while (emails.moveToNext()) {
  44. String emailAddress = emails.getString(emails.getColumnIndex(
  45. ContactsContract.CommonDataKinds.Email.DATA));
  46. sb.append(",emailAddress=").append(emailAddress);
  47. }
  48. emails.close();
  49. Log.i(TAG, sb.toString());
  50. }
  51. cursor.close();
  52. }
  53. /**
  54. * 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId
  55. * 这时后面插入data表的依据,只有执行空值插入,才能使插入的联系人在通讯录里面可见
  56. */
  57. public void testInsert() {
  58. ContentValues values = new ContentValues();
  59. //首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId
  60. Uri rawContactUri = this.getContext().getContentResolver().insert(RawContacts.CONTENT_URI, values);
  61. long rawContactId = ContentUris.parseId(rawContactUri);
  62. //往data表入姓名数据
  63. values.clear();
  64. values.put(Data.RAW_CONTACT_ID, rawContactId);
  65. values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);//内容类型
  66. values.put(StructuredName.GIVEN_NAME, "李天山");
  67. this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
  68. //往data表入电话数据
  69. values.clear();
  70. values.put(Data.RAW_CONTACT_ID, rawContactId);
  71. values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
  72. values.put(Phone.NUMBER, "13921009789");
  73. values.put(Phone.TYPE, Phone.TYPE_MOBILE);
  74. this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
  75. //往data表入Email数据
  76. values.clear();
  77. values.put(Data.RAW_CONTACT_ID, rawContactId);
  78. values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
  79. values.put(Email.DATA, "liming@itcast.cn");
  80. values.put(Email.TYPE, Email.TYPE_WORK);
  81. this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
  82. }
  83. //批量添加,处于同一个事务中
  84. public void testSave() throws Throwable{
  85. //文档位置:reference\android\provider\ContactsContract.RawContacts.html
  86. ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
  87. int rawContactInsertIndex = ops.size();
  88. ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
  89. .withValue(RawContacts.ACCOUNT_TYPE, null)
  90. .withValue(RawContacts.ACCOUNT_NAME, null)
  91. .build());
  92. //文档位置:reference\android\provider\ContactsContract.Data.html
  93. ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)
  94. .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
  95. .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
  96. .withValue(StructuredName.GIVEN_NAME, "赵薇")
  97. .build());
  98. ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)
  99. .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
  100. .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
  101. .withValue(Phone.NUMBER, "13671323809")
  102. .withValue(Phone.TYPE, Phone.TYPE_MOBILE)
  103. .withValue(Phone.LABEL, "手机号")
  104. .build());
  105. ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)
  106. .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
  107. .withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE)
  108. .withValue(Email.DATA, "liming@itcast.cn")
  109. .withValue(Email.TYPE, Email.TYPE_WORK)
  110. .build());
  111. ContentProviderResult[] results = this.getContext().getContentResolver()
  112. .applyBatch(ContactsContract.AUTHORITY, ops);
  113. for(ContentProviderResult result : results){
  114. Log.i(TAG, result.uri.toString());
  115. }
  116. }
  117. }
package cn.itcast.contact; import java.util.ArrayList; import android.content.ContentProviderOperation; import android.content.ContentProviderResult; import android.content.ContentResolver; import android.content.ContentUris; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; import android.provider.ContactsContract; import android.provider.ContactsContract.RawContacts; import android.provider.ContactsContract.CommonDataKinds.Email; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.CommonDataKinds.StructuredName; import android.provider.ContactsContract.Contacts.Data; import android.test.AndroidTestCase; import android.util.Log; public class ContactTest extends AndroidTestCase { private static final String TAG = "ContactTest"; public void testGetAllContact() throws Throwable{ Uri uri = ContactsContract.Contacts.CONTENT_URI; ContentResolver contentResolver = this.getContext().getContentResolver(); Cursor cursor = contentResolver.query(uri, null, null, null, null); while(cursor.moveToNext()){ StringBuilder sb = new StringBuilder(); String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); sb.append("contactId=").append(contactId).append(",name=").append(name); Cursor phones = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null); while(phones.moveToNext()){ String phoneNumber = phones.getString(phones.getColumnIndex( ContactsContract.CommonDataKinds.Phone.NUMBER)); sb.append(",phone=").append(phoneNumber); } phones.close(); Cursor emails = contentResolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId, null, null); while (emails.moveToNext()) { String emailAddress = emails.getString(emails.getColumnIndex( ContactsContract.CommonDataKinds.Email.DATA)); sb.append(",emailAddress=").append(emailAddress); } emails.close(); Log.i(TAG, sb.toString()); } cursor.close(); } /** * 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId * 这时后面插入data表的依据,只有执行空值插入,才能使插入的联系人在通讯录里面可见 */ public void testInsert() { ContentValues values = new ContentValues(); //首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId Uri rawContactUri = this.getContext().getContentResolver().insert(RawContacts.CONTENT_URI, values); long rawContactId = ContentUris.parseId(rawContactUri); //往data表入姓名数据 values.clear(); values.put(Data.RAW_CONTACT_ID, rawContactId); values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);//内容类型 values.put(StructuredName.GIVEN_NAME, "李天山"); this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values); //往data表入电话数据 values.clear(); values.put(Data.RAW_CONTACT_ID, rawContactId); values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); values.put(Phone.NUMBER, "13921009789"); values.put(Phone.TYPE, Phone.TYPE_MOBILE); this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values); //往data表入Email数据 values.clear(); values.put(Data.RAW_CONTACT_ID, rawContactId); values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE); values.put(Email.DATA, "liming@itcast.cn"); values.put(Email.TYPE, Email.TYPE_WORK); this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values); } //批量添加,处于同一个事务中 public void testSave() throws Throwable{ //文档位置:reference\android\provider\ContactsContract.RawContacts.html ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); int rawContactInsertIndex = ops.size(); ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI) .withValue(RawContacts.ACCOUNT_TYPE, null) .withValue(RawContacts.ACCOUNT_NAME, null) .build()); //文档位置:reference\android\provider\ContactsContract.Data.html ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI) .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) .withValue(StructuredName.GIVEN_NAME, "赵薇") .build()); ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI) .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) .withValue(Phone.NUMBER, "13671323809") .withValue(Phone.TYPE, Phone.TYPE_MOBILE) .withValue(Phone.LABEL, "手机号") .build()); ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI) .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE) .withValue(Email.DATA, "liming@itcast.cn") .withValue(Email.TYPE, Email.TYPE_WORK) .build()); ContentProviderResult[] results = this.getContext().getContentResolver() .applyBatch(ContactsContract.AUTHORITY, ops); for(ContentProviderResult result : results){ Log.i(TAG, result.uri.toString()); } } }

更多相关文章

  1. mybatisplus的坑 insert标签insert into select无参数问题的解决
  2. python起点网月票榜字体反爬案例
  3. android listview 自动加载
  4. DataBinding
  5. Android(安卓)SQLiteDatabase的使用
  6. android SQLite数据库基本操作示例
  7. android中的状态保存
  8. Android切换横屏竖屏生命周期变化
  9. Android动态添加删除recycleview并动态保存recycleview中的的数

随机推荐

  1. android小问题:RadioButton设置文字在图片
  2. Android(安卓)Activity生命周期
  3. Android(安卓)数据存储02之文件读写
  4. Android(安卓)studio项目不能编译,提示设
  5. Android(安卓)4.0 external下功能库说明
  6. Android(安卓): SeekBar 实现图片旋转缩
  7. Android中G-Sensor相关流程
  8. Android(安卓)SDK Android(安卓)NDK Andr
  9. Android原生的TTS(语音播报功能)
  10. 如何完全卸载Android(安卓)Studio并进行