一般情况下,一个数据库可以有多个内容提供者吗?
我有以下情况/愿望:
我有一个带有数据库的应用程序,它存储“主数据”(例如项目定义和偏好)和“实时数据”(例如该项目的工作时间)。
我有内部内容提供程序来读取和写入数据。
现在我想要两个更多的内容提供者供外部使用。
一个用于访问“主数据”(必须具有特殊的读写权限)
一个用于访问“实时数据”(必须具有特殊的读写权限,但与第一个不同)。
可能吗?如何?
我尝试实现不同的提供程序,但我得到了很多“原因: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>