HarmonyOS 鸿蒙Next 图库拿到的图片 uri 无法转换为绝对路径

发布于 1周前 作者 gougou168 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 图库拿到的图片 uri 无法转换为绝对路径 希望拿到图片的绝对路径, 实际无法获得。

3 回复

公共目录图片视频文件的绝对路径对应用屏蔽,这个是单框架公共目录纯净化的设计理念。path需要使用其它方式替代。

更多关于HarmonyOS 鸿蒙Next 图库拿到的图片 uri 无法转换为绝对路径的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,图库返回的图片URI是基于ContentProvider的,通常以content://开头。这种URI并不直接对应文件系统的绝对路径,而是通过ContentResolver进行访问。要获取图片的绝对路径,可以使用ContentResolveropenFileDescriptor方法获取文件描述符,然后通过FileDescriptor获取文件路径。具体代码如下:

import ohos.app.Context;
import ohos.data.dataability.DataAbilityHelper;
import ohos.data.dataability.DataAbilityPredicates;
import ohos.data.resultset.ResultSet;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;
import ohos.utils.net.Uri;

public class ImageUtils {
    private static final HiLogLabel LABEL = new HiLogLabel(HiLog.LOG_APP, 0x00201, "ImageUtils");

    public static String getAbsolutePath(Context context, Uri uri) {
        String absolutePath = null;
        try {
            DataAbilityHelper helper = DataAbilityHelper.creator(context);
            String[] projection = { "_data" };
            DataAbilityPredicates predicates = new DataAbilityPredicates();
            ResultSet resultSet = helper.query(uri, projection, predicates);
            if (resultSet != null && resultSet.goToFirstRow()) {
                absolutePath = resultSet.getString(resultSet.getColumnIndexForName("_data"));
            }
        } catch (Exception e) {
            HiLog.error(LABEL, "Failed to get absolute path: " + e.getMessage());
        }
        return absolutePath;
    }
}

此代码通过DataAbilityHelper查询URI对应的_data字段,该字段通常包含文件的绝对路径。如果查询成功,返回的absolutePath即为图片的绝对路径。

在HarmonyOS鸿蒙Next中,图库返回的URI通常是content://格式,无法直接转换为绝对路径。你可以通过DataAbilityHelperFileDescriptor来读取文件内容,或者使用File类处理。如果需要绝对路径,可以尝试将文件复制到应用沙箱目录中,再获取路径。具体实现可参考官方文档或示例代码。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!