Android,通訊錄導入,contacts,聯繫人

說明 :  APP 端有聯繫人的信息,要導入到手機

   (這裏只是抽取了項目中小部分的代碼,如果有這方面的需求,直接拷貝即可)

 1.  獲取某個分組下的所有聯繫人信息(模板,可以不做修改直接使用) 

         拷貝之後,報紅部分是一個聯繫人的Bean,修改成自己的...

public List<AppAddressBook> getAllContactsByGroupId(long groupId) {

        String[] RAW_PROJECTION = new String[]{ContactsContract.Data.RAW_CONTACT_ID,};

        String RAW_CONTACTS_WHERE = ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID
                + "=?"
                + " and "
                + ContactsContract.Data.MIMETYPE
                + "="
                + "'"
                + ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE
                + "'";

        // 通過分組的id 查詢得到RAW_CONTACT_ID
        Cursor cursor = MainActivity.this.getContentResolver().query(
                ContactsContract.Data.CONTENT_URI, RAW_PROJECTION,
                RAW_CONTACTS_WHERE, new String[]{groupId + ""}, "data1 asc");

        List<AppAddressBook> contactList = new ArrayList<AppAddressBook>();

        while (cursor.moveToNext()) {
            // RAW_CONTACT_ID
            int col = cursor.getColumnIndex("raw_contact_id");
            int raw_contact_id = cursor.getInt(col);

            mAppAddressBook = new AppAddressBook();
            mAppAddressBook.setUserId(raw_contact_id);

            Uri dataUri = Uri.parse("content://com.android.contacts/data");
            Cursor dataCursor = MainActivity.this.getContentResolver().query(dataUri,
                    null, "raw_contact_id=?",
                    new String[]{raw_contact_id + ""}, null);

            while (dataCursor.moveToNext()) {
                String data1 = dataCursor.getString(dataCursor
                        .getColumnIndex("data1"));
                String mime = dataCursor.getString(dataCursor
                        .getColumnIndex("mimetype"));

                if ("vnd.android.cursor.item/phone_v2".equals(mime)) {
                    mAppAddressBook.setPhone1(data1); // 設置電話號碼,就是手機號碼
                } else if ("vnd.android.cursor.item/name".equals(mime)) {
                    mAppAddressBook.setUserName(data1); // 設置姓名
                }
            }
            dataCursor.close();
            contactList.add(mAppAddressBook);
            mAppAddressBook = null;
        }
        cursor.close();
        return contactList;
    }

  2. 根據姓名刪除聯繫人  (模板,可以不做修改直接使用)

              有時候根據姓名刪除聯繫人並不合適,所以可以選擇根據 ID 來刪除聯繫人

                  做法 : 可以在方法裏面增加一個參數 :

        deleteLocalContact(Context context,String name, int currentId)

    在這裏: long id = cursor.getLong(cursor.getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID)) ;下面添加一個判斷

                              if (currentId == id ) {

                                  ops.add(ContentProviderOperation.newDelete(

                                        ContentUris.withAppendedId(ContactsContract.RawContacts.CONTENT_URI, Id)).build());

                                 try {

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

                                    } catch (Exception e) {

                               }

       (這個部分可以直接拷貝,都是原生API) 如果你想單純根據姓名刪除聯繫人,直接拷貝這部分就成

 private void deleteLocalContact(Context context, String name) {

        Cursor cursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI,
                new String[]{ContactsContract.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(ContactsContract.Data.RAW_CONTACT_ID));
                ops.add(ContentProviderOperation.newDelete(
                        ContentUris.withAppendedId(ContactsContract.RawContacts.CONTENT_URI, Id)).build());
                try {
                    getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
                } catch (Exception e) {
                }
            } while (cursor.moveToNext());
            cursor.close();
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章