HarmonyOS 鸿蒙Next 放在沙箱里的图片,图库里可以看到吗

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

HarmonyOS 鸿蒙Next 放在沙箱里的图片,图库里可以看到吗

放在沙箱里的图片,图库里可以看到吗?可以从图库中分享吗?

2 回复

沙箱中的图片,图库是看不到的

可以使用安全保存控件SaveButton,或者拉起弹框保存api来保存图片,参考demo如下

import { photoAccessHelper } from '@kit.MediaLibraryKit';

import { image } from '@kit.ImageKit';

import { resourceManager } from '@kit.LocalizationKit';

import { BusinessError } from '@kit.BasicServicesKit';

import { fileIo, fileUri } from '@kit.CoreFileKit';

import { promptAction } from '@kit.ArkUI';

let context = getContext(this);

let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);

@Entry

@Component

struct SaveImagePage {

  @State message: string = 'Hello World';

  @State pixelMap?: image.PixelMap = undefined

  async aboutToAppear(): Promise<void> {

    let decodingOptions: image.DecodingOptions = {

      editable: true,

      desiredPixelFormat: 3,

    }

    const rawFileDescriptor: resourceManager.RawFileDescriptor = await getContext(this).resourceManager.getRawFd('test.png');

    const imageSource: image.ImageSource = image.createImageSource(rawFileDescriptor);

    this.pixelMap = await imageSource.createPixelMap(decodingOptions)

  }

  build() {

    Column(){

      Image(this.pixelMap).width(200).height(200)

      Button('保存').onClick(async () =>{

        try {

          const imagePackerApi: image.ImagePacker = image.createImagePacker();

          let packOpts: image.PackingOption = { format: "image/jpeg", quality: 98 }

          let filePath = context.filesDir + "/" + "test.png"

          imagePackerApi.packing(this.pixelMap, packOpts, (err: BusinessError, data: ArrayBuffer) => {

            let file = fileIo.openSync(filePath,fileIo.OpenMode.CREATE | fileIo.OpenMode.READ_WRITE);

            fileIo.writeSync(file.fd,data)

          })

          let uri = fileUri.getUriFromPath(filePath);

          let srcFileUris: Array<string> = [

            uri // 实际场景请使用真实的uri

          ];

          let photoCreationConfigs: Array<photoAccessHelper.PhotoCreationConfig> = [

            {

              // title: 'test', // 可选

              fileNameExtension: 'png',

              photoType: photoAccessHelper.PhotoType.IMAGE,

              subtype: photoAccessHelper.PhotoSubtype.DEFAULT, // 可选

            }

          ];

          let desFileUris: Array<string> = await phAccessHelper.showAssetsCreationDialog(srcFileUris, photoCreationConfigs);

          let imageFile = fileIo.openSync(desFileUris[0],fileIo.OpenMode.CREATE | fileIo.OpenMode.READ_WRITE);

          await fileIo.copyFile(filePath,imageFile.fd,0).then(() =>{

            promptAction.showToast({

              message:"下载成功,已保存到相册"

            })

          })

          await fileIo.close(imageFile.fd)

          console.info('showAssetsCreationDialog success, data is ' + desFileUris);

        } catch (err) {

          console.error('showAssetsCreationDialog failed, errCode is ' + err.code + ', errMsg is ' + err.message);

        }

      })

    }

  }

}

保存安全控件:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-security-components-savebutton-V5

拉起弹框保存api:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-photoaccesshelper-V5#showassetscreationdialog12

更多关于HarmonyOS 鸿蒙Next 放在沙箱里的图片,图库里可以看到吗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


作为IT专家,对于HarmonyOS 鸿蒙Next系统有一定的了解。关于HarmonyOS 鸿蒙Next放在沙箱里的图片,图库里能否看到的问题,这主要取决于沙箱的配置以及系统的权限管理。

在HarmonyOS 鸿蒙Next系统中,应用沙箱为每个应用提供了完全独立的运行环境,包括文件系统。因此,如果一个应用将图片保存在自己的沙箱内,那么理论上其他应用(如图库应用)是无法直接访问这些图片的,除非系统或用户授予了相应的权限。

然而,如果图库应用被系统授予了访问该沙箱的权限,或者图片被保存在了沙箱外的共享区域,那么图库应用就有可能显示这些图片。

此外,还需要考虑系统缓存、图片格式以及.nomedia文件等因素的影响,这些都可能导致图片在图库中无法正常显示。

综上所述,HarmonyOS 鸿蒙Next放在沙箱里的图片,图库里能否看到取决于多种因素。如果无法确定具体原因,建议检查沙箱配置、系统权限以及图片存储位置等。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部