ContactsContract的学习续:联系人的增、删、查、改

ContactsContract的三层数据结构还是比想象的要复杂,在写代码的过程中遇到很多错误,尤其是查询和删除操作,遇到较多问题,通过自己琢磨API和网上查找资料一一解决,终于实现了联系人的增、删、查、改

后来在网上发现了这篇文章,它的对联系人的增删查改代码很详细,值得参考,在此分享出来:

联系人查询:

private void getContact() {

ContentResolver contentResolver = getContentResolver();

// 获得所有的联系人

Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

// 循环遍历

if (cursor.moveToFirst()) {

 

int idColumn = cursor.getColumnIndex(ContactsContract.Contacts._ID);

 

int displayNameColumn = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);

do {

// 获得联系人的ID号

String contactId = cursor.getString(idColumn);

 

// 获得联系人姓名

String disPlayName = cursor.getString(displayNameColumn);

 

Toast.makeText(MainContentProvider.this, "联系人姓名: "+disPlayName,

Toast.LENGTH_LONG).show();

Log.i("ContentProvider", "联系人姓名: "+disPlayName);

 

// 查看该联系人有多少个电话号码。如果没有这返回值为0

int phoneCount = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

if (phoneCount > 0) {

 

// 获得联系人的电话号码列表

Cursor phonesCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,

ContactsContract.CommonDataKinds.Phone.CONTACT_ID

+ " = " + contactId, null, null);

 

if (phonesCursor.moveToFirst()) {

do {

// 遍历所有的电话号码

String phoneNumber = phonesCursor

.getString(phonesCursor

.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

Toast.makeText(MainContentProvider.this, "联系人电话: "+phoneNumber,

Toast.LENGTH_LONG).show();

Log.i("ContentProvider", "联系人电话: "+phoneNumber);

} while (phonesCursor.moveToNext());

}

phonesCursor.close();

}

//获得联系人的EMAIL

Cursor emailCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, 

ContactsContract.CommonDataKinds.Email.CONTACT_ID+" = "+contactId, null, null);

if(emailCursor.moveToFirst()){

do{

//遍历所有的email

String email = emailCursor.getString(emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA1));

Toast.makeText(MainContentProvider.this, "Email:"+email, Toast.LENGTH_LONG).show();

Log.i("ContentProvider", "Email: "+email);

} while(emailCursor.moveToNext());

}

emailCursor.close();

联系人删除:

private void delContact(MainContentProvider mainContentProvider,

String name) {

Cursor cursor = getContentResolver().query(Data.CONTENT_URI, 

new String[]{Data.RAW_CONTACT_ID}, ContactsContract.Contacts.DISPLAY_NAME+"=?",

new String[]{name}, null);

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

if(cursor.moveToFirst()){

do{

long Id = cursor.getLong(cursor.getColumnIndex(Data.RAW_CONTACT_ID));

ops.add(ContentProviderOperation.newDelete(ContentUris.withAppendedId(RawContacts.CONTENT_URI,Id))

.build());

try { 

           getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 

       } catch (Exception e) { 

       } 

}while(cursor.moveToNext());

cursor.close();

}

}

联系人更新:

private void updateContact(MainContentProvider mainContentProvider,

String oldname, String name, String phone, String email,

String website, String organization, String note) {

Cursor cursor = getContentResolver().query(Data.CONTENT_URI,

new String[]{Data.RAW_CONTACT_ID}, ContactsContract.Contacts.DISPLAY_NAME+"=?",

new String[]{oldname},null);

cursor.moveToFirst();

String id = cursor.getString(cursor.getColumnIndex(Data.RAW_CONTACT_ID));

cursor.close();

ArrayList<ContentProviderOperation> ops =

         new ArrayList<ContentProviderOperation>();

//更新电话号码

ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)

         .withSelection(Data.RAW_CONTACT_ID + "=?"+" AND " + ContactsContract.Data.MIMETYPE + " = ?" + 

         " AND "+Phone.TYPE+"=?",

         new String[]{String.valueOf(id),Phone.CONTENT_ITEM_TYPE,String.valueOf(Phone.TYPE_HOME)})

         .withValue(Phone.NUMBER, phone)

         .build());

//更新email

ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)

         .withSelection(Data.RAW_CONTACT_ID + "=?"+" AND " + ContactsContract.Data.MIMETYPE + " = ?" + 

         " AND "+Email.TYPE+"=?",

         new String[]{String.valueOf(id),Email.CONTENT_ITEM_TYPE,String.valueOf(Email.TYPE_WORK)})

         .withValue(Email.DATA, email)

         .build());

//更新姓名

ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)

         .withSelection(Data.RAW_CONTACT_ID + "=?"+" AND " + ContactsContract.Data.MIMETYPE + " = ?",

         new String[]{String.valueOf(id),StructuredName.CONTENT_ITEM_TYPE})

         .withValue(StructuredName.DISPLAY_NAME, name)

         .build());

联系人插入:

 

private void addContact(Context context, String name, String organisation, 

            String phone, String fax, String email, String address, 

            String website) {

   

       ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 

   

       ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) 

               .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) 

               .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null) 

               .withValue(ContactsContract.RawContacts.AGGREGATION_MODE, ContactsContract.RawContacts.AGGREGATION_MODE_DISABLED) 

               .build()); 

   

       // add name 

       if (!name.equals("")) { 

           ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 

                   .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 

                   .withValue(ContactsContract.Data.MIMETYPE, 

                           ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) 

                   .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name) 

                   .build()); 

       } 

            

       // add phone 

       if (!phone.equals("")) { 

           ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 

                   .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 

                   .withValue(ContactsContract.Data.MIMETYPE, 

                           ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) 

                   .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phone) 

                   .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, 1) 

                   .build()); 

       }   

       // add address 

       if (!address.equals("")) { 

           ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 

                   .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 

                   .withValue(ContactsContract.Data.MIMETYPE, 

                           ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE) 

                   .withValue(ContactsContract.CommonDataKinds.StructuredPostal.STREET, address) 

                   .withValue(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, 

                           ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK) 

                   .build()); 

       }         

   

 // add logo image 

//        Bitmap bm = logo; 

//        if (bm != null) { 

//            ByteArrayOutputStream baos = new ByteArrayOutputStream(); 

//            bm.compress(Bitmap.CompressFormat.PNG, 100, baos); 

//            byte[] photo = baos.toByteArray(); 

//            if (photo != null) { 

//    

//                ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 

//                        .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 

//                        .withValue(ContactsContract.Data.MIMETYPE, 

//                                ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE) 

//                        .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, photo) 

//                        .build()); 

//    

//            } 

//        } 

       try { 

           context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值