Мое приложение имеет 2 типа провайдера
- DocumentProvider ( DP ) exported="true" требуется спецификациями.
- ContentProvider (CP)exported="false" требуется безопасностью
Основной поток связи: 3-е приложение запрашивает у DP некоторую информацию, а DP запрашивает эту информацию у CP и возвращает информацию 3-му приложению.
Предположим, мы используем Microsoft Word/Excel для получения некоторых данных из DocumentProvider. Это схема потока общения между приложениями:
Word ‹ ------- > Поставщик документов ‹ ---- здесь ошибка ---- > ContentProvider
Проблема в том, что DocumentProvider не имеет доступа к собственному ContentProvider. Я имею в виду, что DP и CP находятся внутри одного приложения, но они работают в разных процессах.
Ошибка:
java.lang.SecurityException: Permission Denial: reading com.app.name.provider.DataBaseContentProvider uri content://com.app.name.db.provider/files/innnerFiles/151515 from pid=6655, uid=10042 requires the provider be exported, or grantUriPermission
DP:
<provider
android:name="com.app.name.provider.DocProvider"
android:authorities="com.app.name.provider.DocProvider"
android:exported="true"
android:grantUriPermissions="true"
android:permission="android.permission.MANAGE_DOCUMENTS">
<intent-filter>
<action android:name="android.content.action.DOCUMENTS_PROVIDER" />
</intent-filter>
</provider>
CP:
<provider
android:name="com.app.name.provider.DBProvider"
android:authorities="com.app.name.provider.DBProvider"
android:exported="false" />