#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: ИМХО, вам лучше создавать отдельных поставщиков.