Как реализовать ContentProvider только для чтения? - PullRequest
6 голосов
/ 31 января 2012

Мне интересно, как лучше всего реализовать ContentProvider только для чтения. Я хочу, чтобы мой источник данных изменялся только из моего собственного приложения с помощью дополнительных специальных методов моего ContentProvider (которые, конечно, не доступны через ContentResolver). Другими словами, другие приложения должны иметь возможность использовать только метод запроса моего ContentProvider, но не вставлять, удалять или обновлять.

Очевидное решение, по-видимому, состоит в том, чтобы просто вернуть null / 0/0 и ничего не делать в операции вставки / удаления / обновления. Было бы лучше, чтобы вместо этого всегда выдавалось исключение в этих методах, чтобы ясно показать, что эти операции не разрешены? Или даже есть возможность ограничить доступ к ContentProvider к методу запроса только через разрешения?

Ответы [ 2 ]

3 голосов
/ 11 ноября 2013

Два года спустя я задаю себе тот же вопрос.Я понимаю, что разрешения - это ответ.

Тем не менее, вы должны что-то написать в методах "вставка / удаление / обновление" (которые, надеюсь, не будут вызываться).

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

Но линия, найденная здесь : говорит

Хотя вы должны реализовать эти методы, ваш код не должен ничего делать, кроме как возвращать ожидаемый тип данных.Например, вы можете запретить другим приложениям вставлять данные в некоторые таблицы.Чтобы сделать это, вы можете проигнорировать вызов insert () и вернуть 0.

То есть хороший способ сделать это просто вернуть null / 0/0.Я собираюсь использовать этот способ.

Я не уверен, стоит ли в любом случае тратить время на такой незначительный вопрос.

3 голосов
/ 31 января 2012

Одним из способов достижения этого является использование прав доступа, к которым вы можете обратиться по адресу по этой ссылке в абзаце ContentProvider.В частности, вы должны установить writePermission для своего провайдера в XML-файле AndroidManifest.

Если вы не хотите использовать разрешения безопасности, вы можете использовать подходы, упомянутые во втором абзаце.Я бы предложил выбрасывать исключения, чтобы было ясно, что к этим конкретным функциям вставки / обновления / удаления нельзя получить доступ.

...