我收到来自不同应用程序的默认共享机制(ACTION_SEND)发送的意图。
如果是文件 - 我需要复制它 我不需要完整的文件路径,因为我可以直接用流打开它。
InputStream input = getContentResolver().openInputStream(fileUri);
但我需要知道一个文件名来正确保存文件。
有没有简单而通用的方法来获取共享文件的文件名而不关注内容类型(它可以是来自图库,视频,下载文件的图像)?
或者我应该使用这样的东西从uri获取完整路径然后从中获取文件名?
Get real path from URI, Android KitKat new storage access framework [duplicate]
Android Gallery on KitKat returns different Uri for Intent.ACTION_GET_CONTENT
我也看到了这篇文章(A Uri Is Not (Necessarily) a File)并且说:
您可以对此类Uri值执行以下操作:
- 通过Uri上的查询()找到他们的DISPLAY_NAME和SIZE - OpenableColumns(再次,使用ContentResolver,或理论上 CursorLoader)
有可能吗?我怎么能这样做?
答案 0 :(得分:2)
根据MediaStore界面,确实提供了DISPLAY_NAME列。
Cursor cursor = getContentResolver().query(fileUri, projection, null, null, null);
投影包含DISPLAY_NAME
cursor.moveToFirst();
if (cursor.getCount() > 0) {
// get your file name
}
我没有测试过但它应该可以工作; - )