Частный контент-провайдер доступен только моим приложениям
Я достаточно гуглил, но не смог найти это дело. Я хочу написать собственный контент-провайдер, который будет доступен / доступен только для определенных приложений.
У меня есть этот сценарий:
- Есть несколько приложений в Google Play. Скажи А, В и С.
- Хочу написать контент-провайдера, скажем Z, к которому могут обращаться только A, B и C. Я думаю опубликовать контент-провайдера 'Z' как свой собственный apk.
- Когда Z установлен на устройстве; A, B и C могут получить доступ к Z. Если Z не установлен, то первое приложение направится в Google Play для установки Z.
Теперь мой вопрос:
Можно ли вообще написать такого контент-провайдера, который используется только определенными приложениями? android:exported="false" делает его недоступным для любого другого внешнего приложения. android:grantUriPermissions="true" не работает, когда для android: exported установлено значение false, а установка android: exported в true делает его общедоступным.
Пожалуйста, не стесняйтесь делиться и другими решениями, если они кажутся более подходящими для моих требований об обмене информацией между несколькими приложениями.
1 ответ
android:grantUriPermissions="true" не работает, когда для android:exported установлено значение false
Да, это так.
Тем не мение, android:grantUriPermissions
может не подходить для вашего случая использования, особенно если Z - отдельное приложение. Z должен быть тем, кто вызывает A/B/C, используя Intent
с FLAG_GRANT*
флаг, и я предполагаю, что это не будет соответствовать вашему плану.
Если, как я подозреваю, A/B/C необходимо получить доступ к Z независимо от Z, сообщив им, что к нему можно получить доступ, и предоставив Uri
-специфические разрешения, стандартный подход будет использовать пользовательские signature
-уровень <permission>
, Затем вы защищаете экспорт провайдера и защищаете его с этим разрешением, используя android:permission
в <provider>
, Теория заключается в том, что только ваше приложение может иметь такое разрешение, потому что только ключ вашего приложения будет подписан этим ключом подписи и, следовательно, будет соответствовать подписи.
(Я говорю "в теории", потому что есть проблемы с этим подходом)