You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 11:39:03