Android Q:スコープストレージ内のSQLiteデータベース


13

Android Qでは、新しいスコープストレージ機能が導入されました。

Android 10(APIレベル29)以上を対象とするアプリには、デフォルトで外部ストレージまたはスコープストレージへのスコープアクセスが付与されます。このようなアプリは、外部ストレージ上のアプリ固有のディレクトリだけでなく、アプリが作成した特定のタイプのメディアにもアクセスできます。

外部ストレージにSQLiteデータベースを作成するアプリがあります。これは、アプリをアンインストールしたときにデータベースがまだ有効であり、後でリカバリとして使用したり、Androidデバイスの外部で使用したりできるようにするためです(PCで言う)

Android Qで同じ効果を得るにはどうすればよいですか?より正確には、データベースが外部のパブリックディレクトリに格納されている場合-標準を使用してこのデータベースを読み取るにはどうすればよいSQLiteOpenHelperですか?


フレームワークSQLiteやサポートSQLite AndroidX API(Roomで使用されているもの)では、少なくともできません。カスタムコンパイルされたSQLiteライブラリとおそらくファイル記述子を使用して、あいまいなソリューションを除外することはできません。
CommonsWare

いいえ、違います。noo-oooo-oooo!私は信じられません、パブリックディレクトリに置かれたSQLiteデータベースを使用する方法が必要です...
Barmaley Red Star

アプリの起動時とシャットダウン時に、データベースファイルのコピーを作成できます。メディアストアを使用する場合、権限は必要ありません。
blackapps

@blackapps、このオプションを理解していることを確認しますが、他のアプローチも喜んでいます。外部ストレージ上のSQLiteデータベースへの直接アクセス
Barmaley Red Star

自動バックアップは、データベースファイルのリカバリに使用できます。
アート

回答:


3

あなたはドキュメントからソリューションを使用しようとすることができますhttps
//developer.android.com/training/data-storage/compatibility

  • Android 9(APIレベル28)以下を対象とします。
  • Android 10(APIレベル29)以上を対象とする場合は、アプリのマニフェストファイルでの値をrequestLegacyExternalStorageに設定しtrueます。
<manifest ... >
    <!-- This attribute is "false" by default on apps targeting Android 10 or higher. -->
    <application android:requestLegacyExternalStorage="true" ... >
    ...
    </application>
</manifest>

他の解決策を見つけられれば幸いですが、それは最良の解決策のようです。時間android:requestLegacyExternalStorageがなくなることを恐れています...
バーマリーレッドスター

私が理解しているように消えることについて、私たちはあまり長く待ちません。 Scoped Storage will be required in next year’s major platform release for all apps, independent of target SDK levelAndroid Qスコープストレージ:ベストプラクティスとアップデート
Merov
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.