ContentProvider: Как отменить предыдущий вызов delete()?

Я использую пользовательский ContentProvider. Для запросов существует CancellationSignal (API 16+), который можно использовать для отмены предыдущего вызова query ().

Мой вопрос: как я могу архивировать это с delete()? Для пояснения, мой пользовательский провайдер управляет файлами на SD-карте, и поэтому я хочу иметь возможность отменить операцию удаления внутри моего провайдера.

1 ответ

Решение

Я решил это с помощью простого решения.

Например, для каждого звонка query(), мы помещаем параметр, указывающий на идентификатор задачи, и используем SparseBooleanArray для хранения этого идентификатора, например:

...
private static final SparseBooleanArray _MapInterruption = new SparseBooleanArray();

...
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
    Cursor cursor = ...

    int taskId = ... // obtain task ID from uri
    boolean cancel = ... // obtain cancellation flag from uri
    if (cancel) {
        _MapInterruption.put(taskId, true);
        return null; // don't return any cursor
    } else {
        doQuery(taskId);
        if (_MapInterruption.get(taskId)) {
            _MapInterruption.delete(taskId);
            return null; // because the task was cancelled
        }
    }

    ...
    return cursor;
}// query()

private void doQuery(int taskId) {
    while (!_MapInterruption.get(taskId)) {
        ... // do the task here
    }
}// doQuery()

Использование:

  • Запросить:

    ...
    getContentResolver().query("content://your-uri?task_id=1", ...);
    
  • Отменить:

    ...
    getContentResolver().query("content://your-uri?task_id=1&cancel=true", ...);
    

Для полного рабочего решения взгляните на http://code.google.com/p/android-filechooser/.

Преимущество в том, что вы можете использовать эту технику в Android… 1+ и для других методов, таких как delete(), update()... Хотя CancellationSignal доступен только в API 16+ и ограничен только query(),

Другие вопросы по тегам