HarmonyOS 鸿蒙Next 文件管理API错误,显示Permission denied

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

HarmonyOS 鸿蒙Next 文件管理API错误,显示Permission denied

cke_258.png

/**
 * 从文件读取图像资源
 * @param fileName 图像文件的文件名
 * @returns 返回图像资源的PixelMap对象
 */
async readImageFromFileName(fileName: String): Promise<image.PixelMap | null> {
  let pixelMap: image.PixelMap | null = null;
  if (fileName.length === 0 || fileName === null) {
    // 如果文件名无效,使用默认图像
    console.log("FileName is empty or null, using default image.");
    fileName = "src/main/resources/base/media/img.png"; // 指定默认图像文件名
  }

  try {
    // 获取当前Ability的context
    let context = this as common.UIAbilityContext;
    // 获取resourceManager资源管理器
    const resourceMgr: resourceManager.ResourceManager = context.resourceManager;
    console.log("图像资源" + $r(`app.media.${fileName}`))
    const fileData: Uint8Array = await resourceMgr.getMediaContent($r('app.media.Toyota'))
    console.log("Succeeded in getting RawFileContent");

    // 打印文件数据的前几个字节,用于调试
    console.log("Image data bytes: " + fileData);

    // 获取图片的ArrayBuffer
    const buffer = fileData.buffer.slice(0);
    const imageSource: image.ImageSource = image.createImageSource(buffer);
    pixelMap = await imageSource.createPixelMap();
    console.log("Succeeded in creating PixelMap");
  } catch (err) {
    console.error("Failed to read image from file: ", err);
    // 处理错误,可能返回null或默认的PixelMap对象
  }
  return pixelMap;
}
{
  "requestPermissions": [
    {
      "name": "ohos.permission.USE_BLUETOOTH"
    },
    {
      "name": "ohos.permission.DISCOVER_BLUETOOTH"
    },
    {
      "name": "ohos.permission.ACCESS_BLUETOOTH",
      "reason": "$string:permission_ACCESS_BLUETOOTH",
      "usedScene": {
        "when": "always"
      }
    },
    {
      "name": "ohos.permission.GET_NETWORK_INFO",
      "reason": "$string:permission_GET_NETWORK_INFO"
    },
    {
      "name": "ohos.permission.INTERNET",
      "reason": "$string:permission_GET_NETWORK_INFO"
    },
    {
      "name": "ohos.permission.FILE_ACCESS_PERSIST"
    },
    {
      "name": "ohos.permission.READ_MEDIA",
      "reason": "$string:app_name",
      "usedScene": {
        "abilities": [
          "EntryAbility"
        ],
        "when": "inuse"
      }
    },
    {
      "name": "ohos.permission.WRITE_MEDIA",
      "reason": "$string:app_name",
      "usedScene": {
        "abilities": [
          "EntryAbility"
        ],
        "when": "inuse"
      }
    }
  ]
}

更多关于HarmonyOS 鸿蒙Next 文件管理API错误,显示Permission denied的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

ohos.permission.READ_MEDIA、ohos.permission.WRITE_MEDIA这两个权限从API version 12开始就已废弃,可以使用替代方案

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/app-permission-group-list-V5#%E6%96%87%E4%BB%B6deprecated

更多关于HarmonyOS 鸿蒙Next 文件管理API错误,显示Permission denied的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,文件管理API返回“Permission denied”错误,通常是由于应用未获得必要的文件访问权限所致。HarmonyOS采用基于权限的安全模型,应用在访问文件系统时,必须声明并获取相应的权限。

首先,确保在应用的config.json文件中声明了ohos.permission.READ_USER_STORAGEohos.permission.WRITE_USER_STORAGE权限。例如:

{
  "module": {
    "reqPermissions": [
      {
        "name": "ohos.permission.READ_USER_STORAGE"
      },
      {
        "name": "ohos.permission.WRITE_USER_STORAGE"
      }
    ]
  }
}

其次,应用在运行时需要动态申请这些权限。可以使用abilityContextrequestPermissionsFromUser方法请求权限:

let context = ...; // 获取AbilityContext
let permissions = ['ohos.permission.READ_USER_STORAGE', 'ohos.permission.WRITE_USER_STORAGE'];
context.requestPermissionsFromUser(permissions).then((data) => {
  if (data.authResults[0] === 0) {
    // 权限已授予
  } else {
    // 权限被拒绝
  }
});

如果权限已正确声明和申请,但仍然出现“Permission denied”错误,可能是由于文件路径错误或文件系统权限限制。检查文件路径是否正确,并确保应用有权限访问该路径。

在HarmonyOS鸿蒙Next中,文件管理API出现“Permission denied”错误,通常是由于权限配置不当或未正确申请文件访问权限所致。请按照以下步骤排查:

  1. 检查权限声明:确保在config.json文件中已声明ohos.permission.READ_MEDIAohos.permission.WRITE_MEDIA权限。
  2. 动态权限申请:在运行时通过requestPermissionsFromUser方法动态申请权限。
  3. 文件路径验证:确保访问的文件路径正确且应用有权限访问该路径。
  4. 日志分析:查看日志以获取更详细的错误信息,定位问题根源。

若问题仍未解决,建议参考官方文档或联系技术支持。

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