3

我正在接收来自不同应用程序的使用默认共享机制 (ACTION_SEND) 发送的意图。

如果它是一个文件——我需要复制它。
我不需要文件的完整路径,因为我可以直接用流打开它。

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

但我需要知道一个文件名才能正确保存文件。

是否有任何简单通用的方法来获取共享文件的文件名而不注意内容类型(它可以是来自图库、视频、来自下载的文件的图像)?


或者我应该使用这样的东西从 uri 中获取完整路径,然后从中获取文件名?

从 URI 获取真实路径,Android KitKat 新的存储访问框架 [重复]
KitKat 上的 Android Gallery 为 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 回答