一般情况下,只有一个数据库可以有多个内容提供商吗?
我有以下情况/愿望:
我有一个带有数据库的应用程序,用于存储“主数据”(例如项目定义和首选项)和“实时数据”(例如此项目的工作时间)。
我有内部内容提供程序来读写数据。
现在我想要另外两个内容提供商供外部使用。
一个用于访问“主数据”(必须具有读写特殊权限)
一个用于访问“实时数据”(必须具有读写特殊权限,但与第一个不同)。
有可能吗?怎么样?
我尝试实现不同的提供程序,但我得到了很多“引起:java.lang.IllegalStateException:database /data/data/package/databases/db.db(conn#0)已经关闭”。< / p>
我只使用内容提供程序进行数据库访问。用于单行的数据列表(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>