3

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

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

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

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

ありがとう!

4

1 に答える 1

1

API 21は をサポートしていますIntent.ACTION_OPEN_DOCUMENT_TREE。これにより、場所を一度選択すると、提供された URI を使用してそのコンテンツを操作できます。

private static final int LOCATION_CHOOSER_REQ_CODE = 4;

public void chooseLocation() {
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
    startActivityForResult(intent, LOCATION_CHOOSER_REQ_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == LOCATION_CHOOSER_REQ_CODE && resultCode == Activity.RESULT_OK) {
        if (data != null) {
            Uri uri = data.getData();  // Use this URI to access files
        }
}
于 2014-12-19T15:31:30.293 に答える