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

使用Image-Picker包出现权限异常,拍摄图片后无法显示

解决Image-Picker权限异常及图片不显示问题

1. 声明并请求存储权限

在AndroidManifest.xml中添加权限声明:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- Android 13及以上版本需添加媒体权限 -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />

在代码中动态请求权限(以Kotlin为例):

val permissions = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
    arrayOf(Manifest.permission.READ_MEDIA_IMAGES)
} else {
    arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)
}

ActivityCompat.requestPermissions(this, permissions, REQUEST_CODE_PERMISSIONS)

2. 配置grantUriPermission(文件共享场景)

如果通过Uri共享图片给其他应用,启动Image-Picker时需添加临时权限授予:

val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
val photoUri = FileProvider.getUriForFile(this, "${packageName}.fileprovider", photoFile)
// 授予临时读写权限
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri)
startActivityForResult(intent, REQUEST_CODE_CAPTURE)

同时确保FileProvider在AndroidManifest.xml中正确配置:

<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="${applicationId}.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>

3. 修正图片加载逻辑

拍摄完成后,通过Uri加载图片时使用兼容方式,比如用Glide:

Glide.with(this)
    .load(photoUri)
    .into(imageView)

Android 10及以上采用分区存储后,避免直接通过文件路径加载图片,否则会因权限限制导致无法显示。

内容的提问来源于stack exchange,提问作者Krishnapriya_acube

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:35:25