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

Firemonkey相机崩溃:Android 11 FileProvider配置异常求助

解决Android 11下FileProvider相机拍照崩溃问题

1. 检查FileProvider路径配置文件

确保res/xml/file_paths.xml(或自定义文件名)中包含系统相机默认照片存储路径的配置,异常提示的/storage/emulated/0/DCIM/Camera/属于外部存储根目录下的子路径,需添加对应规则:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 保留你已有的其他配置,比如files-path、cache-path等 -->
    <!-- 配置外部存储根目录,覆盖DCIM/Camera路径 -->
    <external-path
        name="external_root"
        path="." />
    <!-- 或者更精确地指定DCIM/Camera目录,提升权限安全性 -->
    <external-path
        name="camera_dcim"
        path="DCIM/Camera/" />
</paths>

2. 确认Manifest中FileProvider注册正确性

检查AndroidManifest.xml里的FileProvider配置,确保authorities与后续生成Uri时的标识一致,且指向正确的路径配置文件:

<application>
    <!-- 其他组件配置 -->
    <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>
</application>

3. 修正相机拍照的Uri生成逻辑

禁止直接使用文件绝对路径创建Uri,必须通过FileProvider生成符合Android 11要求的Content Uri,并授予相机应用临时权限:

// 假设已创建目标照片文件file
Uri photoUri = FileProvider.getUriForFile(
    context,
    BuildConfig.APPLICATION_ID + ".fileprovider", // 与Manifest中authorities完全一致
    file
);

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
// 授予相机读写该Uri的临时权限
takePictureIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
startActivityForResult(takePictureIntent, REQUEST_CAMERA_CODE);

4. 排查TTakePhotoFromCameraAction内部逻辑

如果使用的是第三方库或自定义的TTakePhotoFromCameraAction,需确认其内部是否硬编码了绝对路径生成Uri。若存在该情况,需修改其逻辑,替换为上述FileProvider生成Uri的方式。

5. 适配Android 11存储权限规则

目标API30下,通过FileProvider传递Uri的相机拍照场景,无需申请READ_EXTERNAL_STORAGE或WRITE_EXTERNAL_STORAGE权限,系统会自动通过临时权限机制允许相机读写指定文件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:06:19