HarmonyOS鸿蒙Next中拍下照片传输到不同页面无法显示的解决方法

HarmonyOS鸿蒙Next中拍下照片传输到不同页面无法显示的解决方法 scanCamera_page页面拉起相机拍完照后,跳转到imageHandle_demopage这个图片处理页面,router带过去的参数urlParams在处理页面无法显示,项目在真机上运行时,拍完照后出现闪退,也没有跳转到imageHandle_demopage页面。

3 回复

应该是没有权限导致的,你参考以下,申请权限

aboutToAppear(): void {
    let permissions: Array<Permissions> = [
      'ohos.permission.CAMERA',
      'ohos.permission.WRITE_MEDIA',
      'ohos.permission.READ_MEDIA',
      'ohos.permission.MEDIA_LOCATION',
    ];
    let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
    // requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗
    atManager.requestPermissionsFromUser(this.context, permissions).then((data: PermissionRequestResult) => {
      let grantStatus: Array<number> = data.authResults;
      let length: number = grantStatus.length;
      for (let i = 0; i < length; i++) {
        if (grantStatus[i] != 0) {
          // 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限
          return;
        }
      }
      console.info(`${TAG} Success to request permissions from user. authResults is ${grantStatus}.`);
    }).catch((err: BusinessError) => {
      console.error(`${TAG} Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
    })
  }

图片无法显示的问题,可以查看获取的pixelMap是否有值,报错和根据uris获取pixelMap参考以下

photoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE; // 过滤选择媒体文件类型为VIDEO
    photoSelectOptions.maxSelectNumber = 1; // 选择媒体文件的最大数目
    photoSelectOptions.isSearchSupported = true
    photoSelectOptions.isEditSupported = true
    let uris: Array<string> = [];
    const photoViewPicker = new photoAccessHelper.PhotoViewPicker();
    photoViewPicker.select(photoSelectOptions).then((photoSelectResult: photoAccessHelper.PhotoSelectResult) => {
      uris = photoSelectResult.photoUris;
      let file = fs.openSync(uris[0], fs.OpenMode.READ_ONLY);
      console.info('file fd:' + file.fd);
      const imageSource: image.ImageSource = image.createImageSource(file.fd);
      let decodingOptions: image.DecodingOptions = {
        editable: true,
        desiredPixelFormat: 3,
      }
      this.pixelMap = await imageSource.createPixelMap(decodingOptions);
    }).catch((err: BusinessError) => {
      console.error(`Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
    })

按照我上面代码,创建photoViewPicker 使用 const photoViewPicker = new photoAccessHelper.PhotoViewPicker();"

更多关于HarmonyOS鸿蒙Next中拍下照片传输到不同页面无法显示的解决方法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,拍下照片后传输到不同页面无法显示的问题,通常与数据传递或UI刷新机制有关。首先,确保照片数据通过Intent或公共数据存储方式正确传递。其次,检查目标页面的UI组件是否及时刷新。如果使用@State@Link装饰器绑定数据,确保数据更新时触发UI刷新。若使用AbilitySlicePage进行页面跳转,确保在onStartonActive生命周期中正确处理接收到的数据。最后,检查权限设置,确保应用具有读取和写入存储的权限。通过以上步骤排查问题,通常可以解决照片无法显示的情况。

在HarmonyOS鸿蒙Next中,若照片传输后无法在不同页面显示,可采取以下步骤:

  1. 检查图片路径:确保图片路径正确无误,路径错误会导致图片无法加载。
  2. 确认图片格式:确保图片格式被系统支持,如JPEG、PNG等。
  3. 权限设置:检查应用是否具有访问存储的权限,需在config.json中声明并动态申请权限。
  4. 全局变量或数据库存储:如果图片数据是通过页面跳转传递,确保数据正确存储于全局变量或数据库中。
  5. 调试代码:使用日志输出检查图片数据在传输过程中的状态,确保数据完整传输。
  6. 更新系统:确保HarmonyOS系统为最新版本,避免因系统bug导致的问题。

通过以上步骤,可以解决照片传输后无法显示的问题。

回到顶部