問題タブ [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.

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

android - ContentResolver.openFileDescriptor() は ContentProvider.openFIle を呼び出さない

ContentProviderメソッドをオーバーライドして実装しましたopenFile(...)ContentResolver.openFileDescriptor(...)次に、メソッドを使用してテストしました。javadoc で指定されているように、次openFileDescriptorを呼び出すとしますContentProvider.openFile

「...生のファイル記述子を開いて、URI の下のデータにアクセスします。これは に似openAssetFileDescriptor(Uri, String)ていますが、基になるopenFile(Uri, String) ContentProvider.openFile()メソッドを使用します...」

問題は、openFile()メソッドが呼び出されなかったことです。代わりに、それopenAssetFile()が呼び出されたことに気付きました。Android 4.1.2r1でテストしました。Android クラス ContentResolver (4.1.2) のソース コードを確認すると、openFileDescriptor()が呼び出されるだけopenAssetFileDescriptor()で、 が呼び出される実行パスがまったく見つかりませんContentProvider.openFile()

誰が私がどこで間違っていたのか知​​っていますか? - ありがとう

これが私のテストメソッド呼び出しです:

bitmapUriは「content://com.myprovider.authority/filename」のようなものです

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

android - Android DocumentsProvider: メイン スレッドで openDocument が呼び出される

新しいStorage Access Framework API をアプリに実装しています。1 つの細かい点を除いて、すべてがうまく機能しているようです。ドキュメント ピッカーを使用して自分のアプリケーションから (たとえば、アプリ内の別のアカウントから) ファイルを開くと、メイン スレッドで実装が呼び出されますopenDocumentDocumentsProvider要求されたファイルがローカルにキャッシュされている場合はこれで問題ありませんが、そうでない場合はネットワーク要求が行われ、NetworkInMainThreadException. 興味深いことに、ドキュメントには「この方法でネットワーク操作を行ってドキュメントをダウンロードしても問題ありません」と記載されています。これは既知のバグですか?もしそうなら、誰かがこれを回避する方法を知っていますか?

ピッカーを起動するコードは次のとおりです。

次に、ユーザーがファイルを選択したとき、これは大まかに次のように処理しopenDocumentます。

メイン スレッドで呼び出されるかどうかのチェックに注意してください。openDocumentこれは、バックグラウンド スレッドで呼び出されるように、外部アプリが私のアプリを使用してファイルを選択する場合には発生しません。自分のアプリからファイルを選択しようとしているときにのみ発生します(ただし、別のアカウントから、したがって別のROOTから)。

しかし、Google ドライブで同じことを試してみたところ (つまり、アプリを起動し、独自のピッカーを使用してファイルを選択)、アプリをクラッシュさせることなく、ネットワーク経由でファイルをダウンロードできたようです。

0 投票する
3 に答える
17630 参照

android - インテントを処理するアクティビティが見つかりません - android.intent.action.OPEN_DOCUMENT

Android 4.4のStorage Access Frameworkを試しています

アクティビティの開始時にインテントを起動するダミーアプリを開発しました。

また、ファイル プロバイダーとして機能する別のダミー アプリを開発しました。

クラス MyFileProvider を実装しました。

しかし、ユーザーアプリ (インテントを起動するアプリ) を起動すると、次のエラーが表示されます

私はアンドロイドの開発者ドキュメントに従っていました。私が間違っているかもしれないアイデアはありますか?

編集:これが私の最新のマニフェストです。また、「DocumentsProvider を拡張する」MyFileProvider の「適切な」実装が必要ですか? 今のところ、関数で null を返すことはできますか?

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

android - Picasa を使用したスト​​レージ アクセス フレームワーク

新しい Storage Access Framework を画像のコンテンツ ピッカーとして使用して、結果のファイルをビットマップとして取得するにはどうすればよいですか? コンテンツが電話にローカルな場合、これは以下のコードに示すように簡単に実行できます。ただし、コンテンツが picasa や google ドライブまたはボックスなどの場所からのものである場合、BitmapFactory.decodeStream(InputStream) は常に false を返すため、コンテンツにアクセスできません。解決策はありますか?

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

android - kitkat で ACTION_GET_CONTENT を使用すると、Storage Access Framework に登録されたアプリも一覧表示されます

kitkat では、ACTION_GET_CONTENT を使用して、画像をサポートするアプリを一覧表示しています。しかし、Chooser UI には 2 つのセクションがあります。上部のセクションには Storage Access Framework (SAF) に登録されたアプリが一覧表示され、リストの下部のセクションにはインテント ACTION_GET_CONTENT に登録されたアプリが表示されます。

まず、これが正しい方法で機能していることを知りたいですか? はいの場合、両方に登録されているアプリが 2 回表示されます。リストの1つでそれらをフィルタリングする方法はありますか。たとえば、アプリが上部セクション (SAF に登録) に表示される場合、下部セクション (ACTION_GET_CONTENT に登録) には表示されません。

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

android - 「プライベート」(ローカルのみ) フォルダー/ファイル ピッカーとしてのストレージ アクセス フレームワーク?

私の最終的な目標は、ユーザーがファイルを保存するフォルダーを選択できるようにすることです。ファイルは、ユーザーが保存先を選択した後、ある時点で作成されるビデオ ファイルです。
ストレージ アクセス フレームワーク ピッカーを使用して、保存する場所を選択できるようにしているだけです。

まず、ユーザーがフォルダーのみを選択できるようにする方法はありますか (ファイル/ファイル名は選択できません)。
私が今できる最善の方法はACTION_CREATE_DOCUMENT、保存場所を取得するためにインテントを使用することですが、SAFピッカーでファイル名を指定したくありません(これはアプリで行われます)...

第二に、ストレージ アクセス フレームワークのドキュメントを読み、いくつかのコードサンプルからいくつ かのビットをまとめた後、ユーザーが外部ストレージ (SD カード) を参照できるようにすることで、ほとんど私が望んでいることを実行するDocumentsProvider が動作するようになりました。ビデオ ファイルを保存する適切な場所のディレクトリ - queryRoots() メソッドを指す独自のルートを追加することによって。 Environment.getExternalStorageDirectory()

ただし、私が本当に望んでいるのは、それが私の唯一のルートであることです (現時点では、ドライブ、ダウンロードなども取得しています)。
他のルートを削除/非表示にして、本質的にアプリケーション固有のファイル ピッカーにすることはできますか?
それとも、ローカル ストレージのみを表示しますか (おそらくRoot.FLAG_LOCAL_ONLYフラグが役立ちます)?

ありがとう!