2010-10-06 2 views
1

У поставщика контента для Android есть методы для обычных подозреваемых {insert, delete, query, update}, но если я хочу отправлять управляющие сообщения, нет очевидного механизма. Предположим, что одна из таблиц, которым управляют, должна быть сброшена, очищена и перезагружена. Как это можно сделать? У меня есть несколько подходов, каждый из которых кажется немного хакерским.(best) Способы доставки управляющих сообщений произвольному поставщику контента

1) создать работу (или службу/приемник) для задания. Активность делает массовое удаление и вставку. Это кажется наименее хакерским, но когда поставщик контента начинает работу с базой данных, он создает таблицы и инициализирует их.
Кажется неэффективным дублировать код инициализации в помощнике базы данных поставщика контента и в отдельном действии.

2) угон поставщика контента api. Столбец может быть создан, если метод вставки (или update/query/delete) будет ссылаться на недоступные для него методы.

3) использовать множественное наследование, чтобы сделать контент-провайдер также службой (или активностью). Это, вероятно, ближе всего к тому, что я хочу, но я не знаю, как это сделать. Это чувствует себя опасно, особенно если это была деятельность.

4) имеют пару контент-провайдера Похож на (3), но, надеюсь, без бородавок. У службы будет помощь для выполнения всех видов управления. Например, таблицы поиска загрузки, таблицы очистки, чистые истекшие кортежи, ... Если это было сделано, служба, как будет запущена служба? поставщиком контента?

ответ

1

3) невозможно на Java.

4) просто сбрасывает ContentProvider и использует API, предоставляемый службой.

Там также может быть:

5) Попросите ContentProvider зарегистрировать BroadcastReceiver через getContext().registerReceiver(), и отправлять в ней для различных операций

Я не пробовал, но если предположить, что Context возвращенное getContext() поддерживает его, он должен работать.

+0

Да, пользователь BroadcastReceiver работает очень хорошо. – phreed

+0

@preed: Сладкий! Я знаю, что «Контекст», переданный «BroadcastReceiver», несколько ограничен в том, что он может сделать, поэтому я был обеспокоен тем, что тот, который был предоставлен «ContentProvider», может иметь схожие проблемы. Рад, что это сработало для вас! – CommonsWare

Смежные вопросы