我的应用程序有 2 种类型的提供程序
- 规范要求的DocumentProvider ( DP ) 被导出=“true”
- ContentProvider (CP) isexported="false" 安全要求
基本通信流程是第 3 个应用程序向 DP 请求一些信息,DP 向 CP 请求此信息并将信息返回给第 3 个应用程序。
假设我们使用 Microsoft Word/Excel 从 DocumentProvider 获取一些数据。这是应用程序之间通信流程的方案:
Word < ------- > Document Provider < ---- error here ---- > ContentProvider
问题是 DocumentProvider 无权访问它自己的 ContentProvider。我的意思是 DP 和 CP 在 1 个应用程序中,但它们在不同的进程中运行。
错误是:
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" />