一般に、1 つのデータベースに対して複数のコンテンツ プロバイダーを使用することは可能ですか?
私は次の状況/願いを持っています:
「マスターデータ」(プロジェクトの定義や設定など)と「ライブデータ」(このプロジェクトの作業時間など)を保存するデータベースを備えたアプリが1つあります。
データを読み書きするための内部コンテンツ プロバイダーがあります。
ここで、外部使用のためにさらに 2 つのコンテンツ プロバイダーが必要です。
「マスターデータ」へのアクセス用 (読み取りと書き込みのための特別な権限が必要)
1 つは「ライブ データ」へのアクセス用です (読み取りと書き込みには特別なアクセス許可が必要ですが、最初のものとは異なります)。
出来ますか?そしてどうやって?
さまざまなプロバイダーを実装しようとしましたが、「Caused by: java.lang.IllegalStateException: database /data/data/package/databases/db.db (conn# 0) already closed」が大量に発生します。
データベース アクセスにはコンテンツ プロバイダーのみを使用します。データのリスト (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>