Предоставление ограниченного доступа с помощью ContentProvider

#android #android-contentprovider

#Android #android-contentprovider

Вопрос:

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

Другими словами, так ли это, что ContentProvider либо предоставляет полный доступ к данным, либо нет. Если нет, то как?

Ответ №1:

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

Если вы хотите, чтобы сторонние приложения могли получать данные от вашего провайдера в любой момент времени по любой причине, тогда нормальным поведением является предоставление им доступа ко всему в этом провайдере, если у них есть правильные разрешения. Вы можете потребовать, чтобы стороннее приложение имело определенные разрешения на чтение и / или запись данных у вашего провайдера. Теоретически можно Binder.getCallingUid() попытаться определить приложение, которое пытается работать с вашим провайдером, и каким-то образом ограничить доступ в зависимости от того, кто запрашивает, но я этого не пробовал, и в любом случае это может быть непрактично.

Однако, если вы хотите, чтобы сторонние приложения получали данные от вашего провайдера только по вашему запросу — обычно путем запуска одного из их действий — вы можете ограничить область доступа одним Uri . Например, это будет шаблон, который будет использовать почтовый клиент. Некоторые электронные письма содержат вложения, которые почтовый клиент хотел бы открыть для просмотра в каком-либо другом приложении (например, вложение PDF в программе просмотра PDF). Почтовый клиент будет обслуживать вложения через a ContentProvider , но не разрешать произвольный доступ ( android:exported="false" ). Затем они будут использовать флаги, подобные FLAG_ACTIVITY_GRANT_READ_PERMISSION Intent используемым для запуска стороннего приложения, чтобы указать, что Uri Intent стороннее приложение может использоваться сторонним приложением для получения данных от поставщика.

Комментарии:

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

2. @SrikanthReddy: ИМХО, вам лучше создавать отдельных поставщиков.