Проблема, связанная с удалением группы контактов на Android

У меня есть этот код для удаления группы контактов

public void delete(Activity act,String[] args) {
        try {
            int b=act.getContentResolver().delete(ContactsContract.Groups.CONTENT_URI,"_ID=?", args);

            Toast.makeText(act, "Deleted",Toast.LENGTH_SHORT).show();


            //notify registered observers that a row was updated
            act.getContentResolver().notifyChange(ContactsContract.Groups.CONTENT_URI, null);

        } catch (Exception e) {
            Log.v(TAG, e.getMessage(), e);
            Toast.makeText(act, TAG + " Delete Failed",Toast.LENGTH_LONG).show();
        }
    }

Я называю метод как

private void processDelete(long rowId) {
        String[] args = { String.valueOf(rowId) };

        objItem.delete(this, args);
        cur.requery();
    }

я имею

<uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission>

Идентификатор передан в порядке.

Значение b возвращает 1, но удаление не выполняется, при возобновлении активности я все еще вижу запись в списке. Что я делаю не так?

3 ответа

Решение

Это была моя мисс

При запросе существующих записей мне пришлось добавить предложение where, чтобы обозначить, что я не хочу deleted=1 Значения, поскольку значения не удаляются мгновенно, они помечаются как удаленные.

Cursor managedCursor = act.managedQuery(contacts, projection, 
                ContactsContract.Groups.DELETED + "=0", 
                null,
                ContactsContract.Groups.TITLE + " ASC");
        return managedCursor;

Вам не нужно добавлять пункт, где говорится, что. Если вы хотите мгновенно удалять элементы в базе данных и не помечать их как удаленные, добавьте эту строку в свой URI.

mUri.buildUpon().appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER,"1").build();
//and then call your delete function with URI appended like this.
mResolver.delete(mUri,null, null);

этот флаг: CALLER_IS_SYNCADAPTER, установленный в 1, немедленно удалит строку.

Надеюсь, это помогло.

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

    private void deletaAllInGroup(Context context, long groupId)
           throws RemoteException, OperationApplicationException{
    ContentValues values = new ContentValues();         
    values.put(ContactsContract.Groups._ID, groupId);
    getContentResolver().delete(ContactsContract.Groups.CONTENT_URI,values.toString(),null);
        }
Другие вопросы по тегам