Как удалить контакт?

Я работаю на Android 2.1 ContactContract, когда я не установил учетную запись (например, учетную запись gmail) на эмулятор Android, затем создал новый контакт, но не смог удалить этот контакт в БД.

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
    String[] args = new String[] {id};
    ops.add(ContentProviderOperation.newDelete(Data.CONTENT_URI)
            .withSelection(Data.CONTACT_ID + "=?", args)
            .build());
    ops.add(ContentProviderOperation.newDelete(RawContacts.CONTENT_URI)
             .withSelection(RawContacts.CONTACT_ID + "=?", args)
             .build());
    ops.add(ContentProviderOperation.newDelete(Contacts.CONTENT_URI)
             .withSelection(Contacts._ID + "=?", args)
             .build());

person user408273    schedule 05.08.2010    source источник


Ответы (3)


Удаление контакта из RawContacts приведет к удалению данных из таблицы Data, Contacts.

ArrayList ops = new ArrayList(); String[] args = new String[] {id}; 
// if id is raw contact id
ops.add(ContentProviderOperation.newDelete(RawContacts.CONTENT_URI).withSelection(RawContacts._ID + "=?", args) .build()); 
    OR
// if id is contact id
ops.add(ContentProviderOperation.newDelete(RawContacts.CONTENT_URI).withSelection(RawContacts.CONTACT_ID + "=?", args) .build());
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

person Karan    schedule 05.08.2010
comment
Уважаемый Каран, я попробовал, хотя этот метод может удалить контакт, у него также есть некоторые проблемы. Информация о контактах сохраняется в файле contact2.db , я искал этот файл db, контакт удаляется в таблице контактов, но не удаляется в таблице данных, можно ли полностью удалить контакт? - person user408273; 06.08.2010

public static boolean fullDeleteContactByRawId(String rawId)
{
    Uri rawUri = RawContacts.CONTENT_URI.buildUpon().appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true").build();
    String where = RawContacts._ID + " = ?";
    String[] args = new String[]{rawId};

    try
    {
        ContentManager.delete(rawUri, where, args);
    }
    catch(Exception e)
    {
        return false;
    }

    return true;
}

уведомление: после полного удаления этот контакт не может синхронизироваться

person Ali Bagheri    schedule 14.03.2017
comment
Откуда вы взяли ContentManager? - person Displee; 09.10.2019

Я использую это, чтобы удалить номер телефона из существующего контакта, но не сам контакт:

    ArrayList ops = new ArrayList();
    String[] args = new String[]{
        ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,
        number,
        Integer.toString(ContactsContract.CommonDataKinds.Phone.TYPE_MAIN),
        raw_contact_id
    };
    ops.add(
        ContentProviderOperation.newDelete(ContactsContract.Data.CONTENT_URI)
            .withSelection(ContactsContract.Data.MIMETYPE + "=? AND "
                + ContactsContract.CommonDataKinds.Phone.NUMBER + "=? AND "
                + ContactsContract.CommonDataKinds.Phone.TYPE + "=? AND "
                + ContactsContract.Data.RAW_CONTACT_ID + "=?"
                , args)
            .build());

    c.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
person sobelito    schedule 28.11.2015