問題タブ [storage-access-framework]
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.
android - Android - インテントでオーディオ コンテンツ URI を開く
ユーザーがデバイスから選択した曲のリストを作成できるアプリがあります。その後、再生する曲を選択できます。アプリはインテントを使用して曲の uri を開き、デフォルトの音楽プレーヤーを使用して実際に曲を再生します。
Astro ファイル マネージャーで曲を選択すると問題なく動作しますが、Google ドライブ、オーディオ セクション、またはダウンロード セクションからファイルを選択すると、曲は再生されません。
次のようなインテントでファイルを選択しています。
そして、 で Uri を取得しdata.getData()
ます。
後で次のようなインテントを使用して Uri Im を開くには:
Astro ファイル マネージャーはフォームfile:///storage/sdcard0/Download/My%20Song.mp3
で Uris を返し、これらはデフォルトのメディア アプリで開いて正常に再生されます。
Google ドライブは Uris をフォームで返しcontent://com.google.android.apps.docs.storage/document/acc%3D1%3Bdoc%3D421
ます。デフォルトのメディアアプリを使用してインテントでそのように Uris を開こうとすると、「要求したトラックを再生できませんでした」というポップアップが表示されます。
そのメディア タイプのデフォルト アプリで Google ドライブが返すコンテンツ URI を開くにはどうすればよいですか?
編集:インテントでURIを開くときに、MIMEタイプを明示的に設定しようとしました:
これを行うと、VLC メディア プレーヤーで開き、VLC が「VLC でこのメディアにエラーが発生しました。メディア ライブラリを更新してください。」というエラーが報告されます。
EDIT 2:セレクターを強制しているにもかかわらず、常にVLCで開いています:
設定 - >アプリ - >アプリの設定をリセットすることも試しましたが、それでも常にデフォルトでVLCに設定されています。これは、Android 5.1 を実行している Nexus 5 上にあります。
編集 3 : Logcat エラー logcat ウィンドウに次のエラーが表示されます。
アプリの AndroidManifest.xml で、次のように指定しています。
編集 4 : これはデバイス固有のようです。上記のテストはすべて Nexus 5 で行われました。Nexus 7 (Android 5.0.2) でテストしたところ、チューザーではなく直接のインテントでコンテンツ URI を開いてもエラーは発生しませんでした。
android - Android SAF でファイル リストを更新する方法
SAF は、ファイルのリストを更新しないようです。Android KitKat を搭載した Samsung Galaxy S4 でこれをテストしました。
Downloads
SAFのデフォルト プロバイダにアクセスするアプリケーションを使用すると、すでに削除されたファイルが表示されます。現在、私は2つのファイルを持っています/sdcard/Download/
.adbで確認し、電話のMy Files
アプリを使用してこれを確認しましたが、SAFには100をはるかに超えるファイルのリストが表示されます. その結果、既に削除されたファイルの 1 つを選択すると、アプリはファイルが存在しないことを通知します (もちろんこれは正しいことです)。
他の誰かがこの問題に直面していますか? SAF によって表示されるリストを更新する解決策はありますか?
更新: Nexus 5 と Android 5.1 で試してみたところ、同じことが起こりました。Downloads
プロバイダーの目的を誤解したと思います。
Downloads
SAF を通じて利用できるプロバイダーは、ダウンロードされたファイルの履歴を表示します (通常、ダウンロード フォルダーに保存されます) 。ダウンロード ディレクトリに移動してファイルを削除しても、ディレクトリに存在する実際のファイルのリストではなく、ダウンロードされたファイルの履歴が表示されるため、これらのファイルはDownloads
プロバイダから削除されません。
Nautilus でコピー/貼り付けを使用してファイルを追加すると、電話を ubuntu にマウントした後、このファイルがDownloads
プロバイダーに表示されません。
では、どうすればこの歴史を取り除くことができるでしょうか。ちょっと待って、ダウンロードというアプリケーションがあります。アプリケーションを開いてそこにあるファイルを削除するか、私のようにすべてをクリアすると、ファイルが消えます。
(Google ドライブ SAF プロバイダーは、外部で行うことを正しくミラーリングするため、それをテストに使用します。)
android - Android でのサービスからの SAF の使用
SAF操作はstartActivityForResult
、UI ピッカーをトリガーするために使用されているようです。ユーザーがピッカーでドキュメントを選択すると、呼び出し元のアクティビティが を介して uri を受け取るため、これは理にかなっていますonActivityResult()
。
問題は、SAF を a から使用する必要があり、Service
固有であるstartActivityForResult
ことです。Activity
Androidサービスから使用できるSAFと対話する別の方法はありますか?
android - Storage Access Framework を使用して特定のディレクトリを開く
現在、以下のコードを使用して Lollipop ファイル ピッカーを開くことで、ファイル URI を取得できます。
ファイル ピッカーは、内部ストレージのルートまたは最後に開いたディレクトリのいずれかで開きます。ファイル ピッカーに特定のディレクトリの内容を表示させるにはどうすればよいですか? たとえば、下の図のように、起動後にファイル ピッカーにダウンロード フォルダーの内容を表示することができます。
android - キットカット、ストレージ アクセス フレームワーク、特定のファイル アクセス許可?
ファイルを選択するための独自のインターフェイスを実装するアプリがあります。これは、アプリが正しく動作するための要件です。
KitKat では、(外部) SD カード上のファイルを変更する前に、ストレージ アクセス フレームワークを介して許可を与える必要があります。
これらの制限付きファイルは引き続き自由に読み取ることができるため、アプリでの表示が妨げられることはありません。しかし、ユーザーがこれらのファイルの 1 つに対して操作を実行することを選択したら、ストレージ アクセス フレームワークを使用して特定のアクセス許可要求をユーザーに求めることはできますか?
以下は、ドキュメントのサンプルです。これは、可能なすべての画像のセットを返します。明らかに、許可を要求している特定の画像を既に識別できる場合は、ユーザーにすべての画像を表示したくありません。ユーザーに表示されるものを絞り込む他のフィルターはありますか?
android - ACTION_OPEN_DOCUMENT_TREE 永続的なアクセス許可
ユーザーがアクセス許可のために SD カードのルートを選択しACTION_OPEN_DOCUMENT_TREE
、アプリがそれを保持する場合、アクセスはその後どのように機能しますか? それは単に前者として機能し、4.4より前の方法でWRITE_EXTERNAL_STORAGE
簡単なアクセスを許可しますか?File
そうでない場合、たとえば、永続化されたルート内のファイルを削除するにはどうすればよいですか (毎回ポップアップが表示されるわけではないことを教えてください)。
android - Android: Storage Access Framework で取得した URI からインテント チューザーでファイルを開く
最初に、ユーザーは新しい Storage Access Framework を使用してファイルを選択できます (アプリが API>19 であると仮定します)。
https://developer.android.com/guide/topics/providers/document-provider.html
次に、次のような URI を保存して、選択したファイルへの参照を保存します。
(この場合、ファイルはデフォルトのダウンロードディレクトリからのものです)。
後で、ユーザーがそれらのファイルを開くことができるようにします (たとえば、UI リストに表示される名前をユーザーが選択するなど)。
Android の有名なインテント チューザー機能でこれを行いたいのですが、上記の URI オブジェクトしかありません...
ありがとう、
android - Storage Access Framework を使用して複数のドキュメントを作成する
タイプのインテントを使用してACTION_CREATE_DOCUMENT
、アプリからデバイスにファイルを保存しています。この意図で一度に複数のドキュメントを作成する方法はありますか? 使おうと思ってEXTRA_ALLOW_MULTIPLE
いたのですが、作成したいドキュメントの数をどのように指定すればよいかわかりません。
ご協力いただきありがとうございます。