使用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
相关产品推荐
相关产品推荐

