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.htmlArrayList<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.htmlops.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. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. 一句话锁定MySQL数据占用元凶
  3. java 定时任务
  4. TabLayout的基本使用结合Viewpager(Android开发)
  5. Android学习笔记-Activity的生命周期
  6. android-使用AsyncTask做下载进度条
  7. java.lang.UnsatisfiedLinkError: No implementation found for
  8. AsyncTask 源码解析
  9. 保存数据到手机内存代码优化(QQ登录保存密码)

随机推荐

  1. Android布局属性详解之RelativeLayout
  2. Install Android Studio in debian Wheez
  3. SeerBar样式
  4. android修改系统源码(重新编译源码)
  5. android 模拟器获取root权限
  6. Android input 输入系统学习
  7. Running Android with low RAM
  8. [Android交互]Android与Unity的交互
  9. android byte[]与图片的转换
  10. Android ImageView图片自适应