web-dev-qa-db-ja.com

Android Q-Scoped Storageのパブリックアクセス可能なドキュメントフォルダーにファイルを書き込む

バックグラウンド

Android=に移行した後、Qドキュメントフォルダー(/storage/emulated/0/Documents)への書き込みアクセスを取得する適切な方法が見つかりません。

また、スコープストレージに関する他の多くの質問に言及する前に、それらの多くを読みました。これまでに見てきたすべてのソリューションでは、アプリ固有のディレクトリを使用するか、メディアディレクトリのみにアクセスします(ドキュメントフォルダーのアクセスではありません)。

Android Qで理解できることから、次のいずれかを選択できます:

  • 自分のアプリ(または私が許可したアプリ)だけがアクセスできるアプリ固有のディレクトリを使用する
  • ユーザーがファイルを保存する場所を選択できるようにします(これはパブリックの場所にできると思います)ACTION_OPEN_DOCUMENT_TREE

問題

私が開発したアプリケーションは、被験者のテストを実施するために使用されます。テストのデータは、次のように、一般公開されているドキュメントフォルダに自動的に保存されます:/storage/emulated/0/Documents/myAppName/subjectName/testData-todaysDate.pdf

ユーザーがテストデータにアクセスする場合は、スマートフォンをコンピューターに接続し、ドキュメントフォルダーに移動します。このため、私は公的にアクセス可能なストレージを使用する必要があります。また、同じデータを別のアプリを介してスマートフォンでテストデータを開きたいと想像してみてください。

私が探している解決策

したがって、私が探しているソリューションは、以下を実行できる必要があります。

  • 何度も許可を求めません(一度でOK)
  • ユーザープロンプトなしでテストデータを自動的に保存(数百のテストが実施されるため)
  • パブリックドキュメントフォルダーに保存します。 /storage/emulated/0/Documents/
  • ユーザーがディレクトリを選択する必要がないため、ACTION_OPEN_DOCUMENT_TREEは使用しない
  • 理想的にはデータは永続的であるため、アプリをアンインストールしてもデータは失われません

Android=でのこれらの変更は、アプリがデータにアクセスする方法でユーザーをより「ループに入れる」ためのものですが、アプリがデータをどのように使用しているかを理解した後は、問題。

4
Jameson

アプリケーションタグのAndroid Q:Android:requestLegacyExternalStorage = "true"のマニフェストファイルにこの行を挿入してみてください。

0