0

我的应用程序有 2 种类型的提供程序

基本通信流程是第 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" />
4

2 回答 2

0

属性

android:authority

  属性,在这个例子中是你的包名,

com.app.name.provider.documents

内容提供者的类型(文档)

自定义文档提供者

于 2018-11-24T18:37:11.070 回答
0

回答这个问题需要更多信息,包括源代码。

但是,根据开发人员的文档

授予权限是一种使通常无权访问其数据的提供商的客户能够一次性克服该限制的一种方式。

通过在 s 的清单声明中添加grant-uri-permission元素DocProvider,它可以授予对特定uris 的访问权限,并且问题可能会解决。

<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>

    <grant-uri-permission android:pathPrefix="content://com.app.name.db.provider" />

</provider>
于 2018-11-26T07:50:34.947 回答