Android Studio中如何获取ImageView选中图片的文件名并在Toast显示
问题解决方法
原因说明
- 你调用
getLastPathSegment()只能拿到文档ID,是因为通过Intent.ACTION_GET_CONTENT获取到的是content://开头的内容URI,不是原始文件路径,路径最后一段是系统分配的文档唯一ID,不是真实文件名。
解决步骤
1. 新增辅助查询文件名的方法
在MainActivity类中新增如下方法,同时导入缺失的依赖包:
import android.database.Cursor; import android.provider.MediaStore; // 省略其他已有代码 private String getFileNameFromUri(Uri uri) { String fileName = null; // 指定查询的字段为文件显示名称 String[] projection = {MediaStore.Images.Media.DISPLAY_NAME}; // 用ContentResolver查询URI对应的文件信息 try (Cursor cursor = getContentResolver().query(uri, projection, null, null, null)) { if (cursor != null && cursor.moveToFirst()) { int nameIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME); fileName = cursor.getString(nameIndex); } } catch (Exception e) { e.printStackTrace(); // 查询异常时兜底返回路径最后一段 fileName = uri.getLastPathSegment(); } return fileName; }
2. 修改Toast调用逻辑
建议把Toast移动到URI非空判断的代码块中避免空指针,替换后的代码如下:
if (null != selectedImageUri) { // update the preview image in the layout IVPreviewImage.setImageURI(selectedImageUri); // 替换原有Toast逻辑 Toast.makeText(getApplicationContext(), "Selected Image: " + getFileNameFromUri(selectedImageUri), Toast.LENGTH_LONG).show(); }
注意事项
- 不需要额外申请存储权限,系统会给你选中的文件URI授予临时读取权限,可直接查询
- 该方法兼容Android 4.1及以上版本,覆盖目前绝大多数主流机型
内容的提问来源于stack exchange,提问作者Tony Shin
相关产品推荐
相关产品推荐

