HarmonyOS 图片选择器的使用,photoAccessHelper.PhotoViewPicker和picker.PhotoViewPicker的区别是什么?

1、photoAccessHelper.PhotoViewPicker和picker.PhotoViewPicker的区别是什么?

2、根据图片选择器拿到 uri地址,直接使用’@ohos.file.fs’模块进行获取图片的file进行操作,是不需要申请额外的读写权限吗?

HarmonyOS
14h前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

针对该问题进行解答:

1、photoAccessHelper.PhotoViewPicker和picker.PhotoViewPicker的区别:photoAccessHelper.PhotoViewPicker支持开发者对收藏夹、视频相册、截屏和录屏相册进行相关操作,用于操作系统相册资源;而picker.PhotoViewPicker则是可以用来访问、保存“公共目录”的图片或视频文件

2、ohos.file.fs提供基础文件操作能力,不需要额外申请权限。但需要注意的是使用fs只能操作文件应用沙箱路径path,例如fs.open无法打开photoViewPicker选择文件的uri,需要进行额外操作,示例核心代码如下:

//缓存目录 
let context = getContext(this) as common.UIAbilityContext;
let cacheDir = context.cacheDir;
photoViewPicker.select(photoSelectOptions).then(async (photoSelectResult: picker.PhotoSelectResult) => {
  uris = photoSelectResult.photoUris;
  console.info('photoViewPicker.select to file succeed and uris are:' + uris);
  let uri: string = uris[0];
  let file = fs.openSync(uri,
    fs.OpenMode.READ_ONLY);
  // 复制文件到缓存目录下 
  fs.copyFileSync(file.fd, cacheDir + '/test.jpeg')
  fs.stat(cacheDir + '/test.jpeg').then((stat: fs.Stat) => {
    console.info("get file info succeed, the size of file is " + stat.size);
  }).catch((err: BusinessError) => {
    console.error("get file info failed with error message: " + err.message + ", error code: " + err.code);
  });
}).catch((err: BusinessError) => {
  console.error(`Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
}) 

3、使用到picker编辑图片能力时,建议使用new picker.PhotoViewPicker() 来生成 photoPicker 对象,示例demo:

import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import picker from '@ohos.file.picker';

@Entry
@Component
struct PhotoPickerPage2 {
  @State img: string = ''
  aboutToDisappear() {
  }
  build() {
    Column() {
      Button("Button")
        .onClick(() => {
          let photoPicker = new picker.PhotoViewPicker();
          photoPicker.select(
            {MIMEType: 'image/*', maxSelectNumber: 1, isPhotoTakingSupported: true, isEditSupported: true, isSearchSupported: false} as photoAccessHelper.PhotoSelectOptions
          ).then((res) => {
            if (res.photoUris.length > 0) {
              this.img = res.photoUris[0]
            }
          }).catch((err: BusinessError) => {
            hilog.info(1, "hilog",'select error: ' + err.code + ' ' + err.message)
          })
        })
      Image(this.img)
    }.width('100%').margin({ top: 5 })

  }
}

photoAccessHelper更建议用作选择图片

分享
微博
QQ
微信
回复
12h前
相关问题
syncawait区别是什么?
422浏览 • 1回复 待解决
HAPHAR区别是什么
2058浏览 • 1回复 待解决
navigationrouter区别是什么
1011浏览 • 1回复 待解决
多态多模区别是什么
5795浏览 • 2回复 已解决
HarmonyOS图片选择器相关问题
475浏览 • 1回复 待解决
PhotoViewPicker获取图片后如何关掉它?
434浏览 • 1回复 待解决
Emitter与EventHub区别是什么
503浏览 • 1回复 待解决
HarmonyOS 图片选择器怎么实现
1浏览 • 0回复 待解决
请问Previewer与Simulator区别是什么
241浏览 • 1回复 待解决