• Lv0
    粉丝0

积分0 / 贡献0

提问1答案被采纳0文章0

作者动态

    使用ServiceExtensionAbility后fileAccess.createFileAccessHelper(context)方法出现异常

    tenon 显示全部楼层 发表于 4 天前

    【问题描述】

    1. 介绍问题现象和发生的背景 使用ServiceExtensionAbility来实现开机启动时, 使用fileAccess.createFileAccessHelper(context)去读取U盘中的内容, 出现报错代码14300003

    2. 相关的代码(请勿使用截图)

        private async loadAdvertFromExternalStorage(): Promise<void> {
          try {
            let isDone: boolean = false
            let helper = fileAccess.createFileAccessHelper(AppUtil.getContext())
            let rootIterator = await helper.getRoots()
            if (!rootIterator) {
              this.logger.info("getRoots interface returns an undefined object");
              return
            }
            let rootinfos: Array<fileAccess.RootInfo> = [];
            while (!isDone) {
              let result = rootIterator.next()
              isDone = result.done
              if (!isDone && result.value.deviceType == 6) { // 外置存储
                rootinfos.push(result.value);
                this.logger.info(`发现外置存储: ${result.value.displayName}`);
              }
            }
      
            let fileInfos: Record<string, Array<NativeMaterial>> = {}
            for (let index = 0; index < rootinfos.length; index++) {
              let rootInfo = rootinfos[index]
              let fileIterator = rootInfo.listFile({
                suffix: ['.mp4', '.png', '.jpg', '.jpeg'],
                displayName: ['ad_*']
              });
              if (!fileIterator) {
                this.logger.info("listFile interface returns an undefined object");
                return
              }
              isDone = false
              while (!isDone) {
                let result = fileIterator.next()
                isDone = result.done
                if (!isDone) {
                  let type = result.value.fileName.endsWith('.mp4') ? MaterialType.native_video : MaterialType.native_image
                  let splitNames = result.value.fileName.split('_') // 格式 ad_8_xx.mp4 | ad_8_xx.png
                  if (splitNames.length >= 3) {
                    let duration = Number.parseInt(splitNames[1])
                    if (duration) {
                      let material: NativeMaterial = { uri: result.value.uri, relativePath: result.value.relativePath, type: type, duration: duration }
                      this.logger.info(`发现素材: ${JSON.stringify(material)}`)
                      materials.push(material)
                    } else {
                      this.logger.info(`素材: ${result.value.relativePath} -----时长获取失败`)
                    }
                  } else {
                    this.logger.info(`素材: ${result.value.relativePath} -----不满足条件`)
                  }
                }
              }
              if (ArrayUtil.isNotEmpty(materials)) {
                fileInfos[rootInfo.displayName] = materials
              }
            }
      
            Object.entries(fileInfos).map(kv => {
              let videos = kv[1].filter(e => e.type == MaterialType.native_video)
              if (ArrayUtil.isNotEmpty(videos)) {
                this.nativeAdverts.push(new NativeAdvertPlayPlan(MaterialType.native_video, kv[0], videos))
              }
              let images = kv[1].filter(e => e.type == MaterialType.native_image)
              if (ArrayUtil.isNotEmpty(images)) {
                this.nativeAdverts.push(new NativeAdvertPlayPlan(MaterialType.native_image, kv[0], images))
              }
            })
          } catch (err) {
            this.logger.error("listFile failed, " + JSON.stringify(err));
          }
        }
    3. 运行结果、错误截图

      1735190700184.jpg

    4. 我尝试过的解决方法和结果

      没有使用ServiceExtensionAbility之前, 已经成功实现从U盘中读取内容, 但是添加ServiceExtensionAbility的功能逻辑后, 出现截图中的报错, 导致无法读取U盘的内容

    5. 我想要达到的结果

      在使用ServiceExtensionAbility的前提下, 通过fileAccess的方式可以正常的读取到U盘中的内容.

    【运行环境】

    硬件: ROM版本: DevEvoStudio版本:Build Version: 4.1.0.400, built on April 9, 2024 SDK版本:full-sdk 4.1.8.4

    您尚未登录,无法参与评论,登录后可以:
    参与开源共建问题交流
    认同或收藏高质量问答
    获取积分成为开源共建先驱

    Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

    返回顶部