2

一般情况下,一个数据库可以有多个内容提供者吗?

我有以下情况/愿望:

  1. 我有一个带有数据库的应用程序,它存储“主数据”(例如项目定义和偏好)和“实时数据”(例如该项目的工作时间)。

  2. 我有内部内容提供程序来读取和写入数据。

现在我想要两个更多的内容提供者供外部使用。

  1. 一个用于访问“主数据”(必须具有特殊的读写权限)

  2. 一个用于访问“实时数据”(必须具有特殊的读写权限,但与第一个不同)。

可能吗?如何?

我尝试实现不同的提供程序,但我得到了很多“原因:java.lang.IllegalStateException:数据库/data/data/package/databases/db.db(conn#0)已经关闭”。

我只使用内容提供者进行数据库访问。数据列表(Spinner、ListViews)的加载器和单行的直接内容提供程序访问。

编辑:

该解决方案确实有效(FAKE_PERMISSION)!

<provider android:name=".provider.MyContentProvider"
    android:authorities="my.package.provider"
    android:enabled="true"
    android:exported="true"
    android:permission="FAKE_PERMISSION" >
    <path-permission
        android:pathPrefix="/master_data"
        android:readPermission="my.package.PERMISSION_READ_MASTER_DATA"
        android:writePermission="my.package.PERMISSION_WRITE_MASTER_DATA" />
    <path-permission
        android:pathPrefix="/live_data"
        android:readPermission="my.package.PERMISSION_READ_LIVE_DATA"
        android:writePermission="my.package.PERMISSION_WRITE_LIVE_DATA" />
</provider>

没有全局提供者许可是行不通的!这两个路径都可以从外部应用程序访问,而无需uses-permission.

<provider android:name=".provider.MyContentProvider"
    android:authorities="my.package.provider"
    android:enabled="true"
    android:exported="true" >
    <path-permission
        android:pathPrefix="/master_data"
        android:readPermission="my.package.PERMISSION_READ_MASTER_DATA"
        android:writePermission="my.package.PERMISSION_WRITE_MASTER_DATA" />
    <path-permission
        android:pathPrefix="/live_data"
        android:readPermission="my.package.PERMISSION_READ_LIVE_DATA"
        android:writePermission="my.package.PERMISSION_WRITE_LIVE_DATA" />
</provider>
4

0 回答 0