3

さまざまなアプリケーションからデフォルトの共有メカニズム (ACTION_SEND) で送信されたインテントを受信して​​います。

ファイルの場合 – コピーする必要があります。
ストリームで直接開くことができるため、ファイルへのフルパスは必要ありません。

InputStream input = getContentResolver().openInputStream(fileUri);

しかし、ファイルを適切に保存するには、ファイル名を知る必要があります。

コンテンツ タイプ (ギャラリーの画像、ビデオ、ダウンロードのファイルなど) に注意を払わずに共有ファイルのファイル名を取得する簡単で普遍的な方法はありますか?


または、このようなものを使用して uri からフル パスを取得し、そこからファイル名を取得する必要がありますか?

URI から実際のパスを取得、Android KitKat の新しいストレージ アクセス フレームワーク [複製]
KitKat の Android ギャラリーが Intent.ACTION_GET_CONTENT に対して異なるURI を返す


また、この記事 ( A Uri Is Not (Necessarily) a File ) を見たところ、次のように書かれています。

このような Uri 値に対して次の操作を実行できます。

  • Uri の query() を介して、DISPLAY_NAME と SIZE (OpenableColumns) を調べます (ここでも ContentResolver を使用するか、理論的には CursorLoader を使用します)。

出来ますか?どうやってやるの?

4

1 に答える 1

3

MediaStore インターフェイスによると、DISPLAY_NAME 列は実際に配信されます。

Cursor cursor = getContentResolver().query(fileUri, projection, null, null, null);

プロジェクションに DISPLAY_NAME が含まれています

cursor.moveToFirst();
if (cursor.getCount() > 0) {
    // get your file name
}

私はそれをテストしていませんが、動作するはずです;-)

于 2014-12-03T14:22:44.513 に答える