2

一般に、1 つのデータベースに対して複数のコンテンツ プロバイダーを使用することは可能ですか?

私は次の状況/願いを持っています:

  1. 「マスターデータ」(プロジェクトの定義や設定など)と「ライブデータ」(このプロジェクトの作業時間など)を保存するデータベースを備えたアプリが1つあります。

  2. データを読み書きするための内部コンテンツ プロバイダーがあります。

ここで、外部使用のためにさらに 2 つのコンテンツ プロバイダーが必要です。

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

0 に答える 0