問題タブ [scoped-storage]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
324 参照

android - API レベル 30 でスコープ ストレージを使用すると、一部のオーディオ ファイルにアクセスできないのはなぜですか?

すべてのOPUSオーディオ ファイルを取得する次のコードがあり、1 つのディレクトリを除くすべてのファイルでうまく機能しますWhatsApp Voice Notes。下のオーディオファイルWhatsApp Audioは正常に取得されますが。内部のファイルにアクセスするために不足している制限/許可はありますWhatsApp Voice Notesか?

android:requestLegacyExternalStorage="true"PS: Android 10 以前では、マニフェスト以下を使用しurilistFilesすべてのファイルにアクセスできますfile

0 投票する
0 に答える
1929 参照

android - Android 11 のメディアストアをスコープ ストレージで更新するにはどうすればよいですか?

MediaStore.createWriteRequest() を使用して uri 許可を要求し、ユーザー許可を要求しても、曲のタイトル、アルバム、アーティストなどのオーディオ ファイルの MediaStore 列を更新できません。ContentResolver.update を実行すると、 noOfRowsUpdate は 1 になりますが、変更は適用されません。

(Google イシュー トラッカーで同じ問題を提起しました - https://issuetracker.google.com/issues/173134422 )

0 投票する
2 に答える
1329 参照

android - Android 11: DocumentFile findFile() が遅すぎる

今回の Google のストレージ ポリシーの更新により、ファイルの保存方法を変更する必要がありました。

まず、私のアプリケーションは以前にプロジェクト フォルダーを /sdcard/ に保存しました。しかし、このポリシーにより、File を使用したアクセスが不可能になり、いくつかの方法を試しました。

アプリ固有のファイルスペースに保存することも考えましたが、アプリの削除時にプロジェクトフォルダを削除するべきではないため、使用できません。

1.メディアストアの使用

まずはMediaStoreを使ってみました。RELATIVE_PATHを使ってフォルダにファイルを入れることはできたのですが、ファイルの管理が非常に難しく、プロジェクトフォルダ内のファイルもメディア(写真、動画、音楽)とは関係のないファイルです。

2.DocumentFile の使用

別の方法を見つけました。Intent の ACTION_OPEN_DOCUMENT_TREE を使用して、ユーザーからプロジェクト フォルダーのアクセス権とツリー uri を取得し、それを使用して DocumentFile を作成することで、ファイルにアクセスできました。

最初はこれがとても良い方法だと思いましたが、すぐに遅いことがわかりました。

特に、findFile() メソッドの場合、1 つのファイルをスキャンするのに 1 秒近くかかります。私のプロジェクトフォルダには数十個のファイルがあり、これは商品化できませんでした。

より良い方法はありますか?DocumentContracts を試してみてくださいという投稿がいくつかありましたが、ファイルの一覧を取得したり、存在を確認したりする機能はないようです。

以下は私の現在のコードです: まず、ツリーの uri をリクエストします:

次に、ツリー uri を取得します。

特に、このように findFile を使用すると非常に遅くなります。

0 投票する
1 に答える
5730 参照

android - android:requestLegacyExternalStorage="true" が Android 10 で機能しない理由 - API 29

プロジェクト compileSdkVersion を 28 から 29 に移行し、マニフェストに android:requestLegacyExternalStorage="true" を追加しましたが、SDK 28 のようにダウンロードやファイルを開くなどのファイル操作が機能しません

グラドルファイル

マニフェスト ファイル

ファイルダウンロードコード

  • パスは、内部ストレージ「/myapp/study materials/」内のフォルダの場所である必要があります
  • url は、サーバーからのファイルの場所の URL である必要があります

ファイルを開く

  • パスは、内部ストレージ「/myapp/study materials/」内のフォルダの場所である必要があります
  • タイトルはファイル名にする必要があります

ファイルの存在チェック

  • パスは、内部ストレージ「/myapp/study materials/」内のフォルダの場所である必要があります
  • タイトルはファイル名にする必要があります

SDK 29 への更新中に動作しないコードをすべて追加しました。サーバーからファイルをダウンロードして、内部ストレージのアプリ固有のフォルダーに保存したいのですが、ダウンロードする前に、ファイルが既にダウンロードされているかどうかも確認する必要があります。それ。すでにダウンロードされている場合は、そのファイルを開く必要があります