Как реализовать ContentProvider только для чтения?

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

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

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

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

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

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

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

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

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

Это говорит о том, что хороший способ – просто вернуть null / 0/0. Я буду использовать этот путь.

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