簡體   English   中英

從聯系人中刪除單個電話類型號碼

[英]Delete a single phone type number from a contact

當其中一個聯系人有多個號碼時,例如:

顯示名稱:GuessWho
類型 = 家
號碼 = 家庭號碼
類型 = 手機
號碼 = 手機號碼
類型 = 其他
編號 = 其他編號 ...

總之...... 其中之一。

如何從此聯系人中刪除帶有號碼的類型(比如說“移動”)? 我必須使用從上一個查詢中獲取的用戶 ID 來更新它,或者如何? 我只需要刪除一個帶有數字的 TYPE,聯系人的其他字段必須保持不變。

我正在使用這段代碼來獲取聯系:

int indexName = c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
    int indexNumber = c
            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
    int indexType = c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE);
    int indexID = c.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID);

String name = c.getString(indexName);
        String number = c.getString(indexNumber);
        String type = c.getString(indexType); 
        String typeStored = (String) Phone.getTypeLabel(mContext.getResources(), Integer.parseInt(type), "");
        Log.i("TYPE READED : ", typeStored);
        String id = c.getString(indexID);

其中 c 是查詢的光標。

來自同一聯系人的每個號碼都有自己的 ID。 你應該用它來刪除。 但是您還需要聯系 ID。 您可以使用以下代碼行獲取它:

contactID = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));

然后使用以下代碼刪除該號碼:

Cursor cur = contentResolver.query(RawContacts.CONTENT_URI, 
            new String[]{RawContacts._ID},
            RawContacts.CONTACT_ID + "=?", 
            new String[] {contactID.toString()}, null);
    int rowId=0;;
    if(cur.moveToFirst()){
        rowId = cur.getInt(cur.getColumnIndex(RawContacts._ID));
    }

    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
    String selectPhone = Data.RAW_CONTACT_ID + " = ? AND " + 
                         Data.MIMETYPE + " = ? AND " + 
                         Phone._ID + " = ?";
    String[] phoneArgs = new String[] { Integer.toString(rowId), 
                                        Phone.CONTENT_ITEM_TYPE, 
                                        ID.toString()};

    ops.add(ContentProviderOperation.newDelete(Data.CONTENT_URI)
            .withSelection(selectPhone, phoneArgs).build());
    try {
        contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
    } catch (RemoteException e) {
        e.printStackTrace();
    } catch (OperationApplicationException e) {
        e.printStackTrace();
    }

要刪除的代碼有點長,下面用更少的代碼行完成了它應該做的事情

public static void deleteContact(ContentResolver contactHelper, String number) {
    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
    String[] args = new String[] { String.valueOf(getContactID(contactHelper, number)) };
    ops.add(ContentProviderOperation.newDelete(RawContacts.CONTENT_URI).withSelection(RawContacts.CONTACT_ID + "=?", args).build());
    try {
        contactHelper.applyBatch(ContactsContract.AUTHORITY, ops);
    } catch (RemoteException e) {
        e.printStackTrace();
    } catch (OperationApplicationException e) {
        e.printStackTrace();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM