如何修改代码实现从Android Studio项目drawable文件夹选图而非系统相册
问题解答
你当前使用的Intent.ACTION_PICK是调用系统级媒体选择器的逻辑,仅能读取Android系统公共存储中的媒体文件。Android Studio项目drawable文件夹下的资源属于打包到APK内部的私有资源,系统组件没有权限直接访问,因此无法通过修改原有Intent参数实现从drawable选择图片的需求,需要自行实现选择逻辑,具体方案如下:
实现步骤
- 第一步:获取项目内所有drawable资源ID列表
List<Integer> drawableResList = new ArrayList<>(); // 遍历R.drawable类的所有字段拿到自定义资源ID Field[] drawableFields = R.drawable.class.getFields(); for (Field field : drawableFields) { // 过滤系统自带的drawable资源,仅保留项目自有资源 if (!field.getName().startsWith("android")) { try { int resId = field.getInt(null); drawableResList.add(resId); } catch (IllegalAccessException e) { e.printStackTrace(); } } }
- 第二步:自定义选择交互页面
自己开发一个列表/网格布局页面,将上一步拿到的drawable资源渲染为缩略图供用户点击选择即可。 - 第三步:处理选择结果
用户选中目标图片后,直接通过页面回调/参数传递的方式将对应资源ID回传给业务逻辑页即可,无需走系统Intent的返回结果链路。
补充:drawable资源转Uri写法
如果业务场景需要用到Uri格式引用drawable资源,可以用以下代码生成对应Uri:
Uri drawableUri = Uri.parse("android.resource://" + getPackageName() + "/" + R.drawable.替换为你的资源文件名);
内容的提问来源于stack exchange,提问作者chen abien
相关产品推荐
相关产品推荐

