HarmonyOS 鸿蒙Next photoAccessHelper.PhotoAsset.getThumbnail是否需要受限权限才可以使用?

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

HarmonyOS 鸿蒙Next photoAccessHelper.PhotoAsset.getThumbnail是否需要受限权限才可以使用?

photoAccessHelper.PhotoAsset.getThumbnail是否需要受限权限才可以使用?是否有其他方式可以不用受限权限去获取到视频文件的缩略图呢?

3 回复

1)getThumbnail 需要 ohos.permission.READ_IMAGEVIDEO权限,参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-photoaccesshelper-V5#getthumbnail 2)对于未申请’ohos.permission.READ_IMAGEVIDEO’权限的应用,可以通过picker的方式调用该接口来请求图片资源数据,详情请参考开发指南。

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/photoaccesshelper-photoviewpicker-V5#指定uri获取图片或视频资源

获取缩略图,可以参考下这个demo:

import media from '@ohos.multimedia.media';

import image from '@ohos.multimedia.image';

import { BusinessError } from '@ohos.base';

import picker from '@ohos.file.picker';

import fs from '@ohos.file.fs';

import photoAccessHelper from '@ohos.file.photoAccessHelper';

@Entry

@Component

struct Index {

  // pixelMap对象声明,用于图片显示

  @State pixelMap: image.PixelMap | string | undefined = undefined;

  build() {

    Column() {

      Button() {

        Text('select').fontSize(20).fontWeight(FontWeight.Bold)

      }.margin({ top: 20 }).width(100).height(40).onClick(() => this.showPicker())

      // Button('点击')

      // .onClick(() => {

      // this.showPicker()

      // })

      Image(this.pixelMap).width(300).height(300).margin({ top: 20 })

    }.width('100%').height('100%')

  }

  showPicker() {

    // 创建图库选择器对象实例

    const photoViewPicker = new photoAccessHelper.PhotoViewPicker();

    // 图库选项配置,类型与数量

    let selectOptions = new photoAccessHelper.PhotoSelectOptions();

    selectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.VIDEO_TYPE;

    selectOptions.maxSelectNumber = 1;

    //调用select()接口拉起图库界面进行文件选择,文件选择成功后,返回PhotoSelectResult结果集

    photoViewPicker.select(selectOptions)

      .then((photoSelectResult: picker.PhotoSelectResult) => {

        //用一个全局变量存储返回的uri

        if (photoSelectResult.photoUris?.[0]) {

          this.testFetchFrameByTime(photoSelectResult.photoUris[0])

        }

      }).catch((err: BusinessError) => {

      console.error(`Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}`);

    })

  }

  // 获取缩略图

  async testFetchFrameByTime(filePath: string) {

    // 创建AVImageGenerator对象

    let avImageGenerator: media.AVImageGenerator = await media.createAVImageGenerator()

    let file = fs.openSync(filePath, fs.OpenMode.READ_ONLY);

    let avFileDescriptor: media.AVFileDescriptor = { fd: file.fd };

    avImageGenerator.fdSrc = avFileDescriptor;

    // 初始化入参

    let timeUs = 0

    let queryOption = media.AVImageQueryOptions.AV_IMAGE_QUERY_NEXT_SYNC

    let param: media.PixelMapParams = {

      width: 300,

      height: 400,

    }

    // 获取缩略图(promise模式)

    this.pixelMap = await avImageGenerator.fetchFrameByTime(timeUs, queryOption, param)

    // 释放资源(promise模式)

    avImageGenerator.release()

    console.info(`release success.`)

    fs.closeSync(file);

  }

}

更多关于HarmonyOS 鸿蒙Next photoAccessHelper.PhotoAsset.getThumbnail是否需要受限权限才可以使用?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


photoAccessHelper.PhotoAsset.getThumbnail()方法需要申请受限ACL权限ohos.permission.READ_IAMGEVIDEO才可以使用,如果要不使用受限权限获取相册内视频缩略图的话,可以先使用PhotoViewPicker获取视频资源,再选取视频帧作为缩略图,但这种方法的局限性在于需要知道缩略图在视频的哪一帧,或者不强制获取的缩略图必须和原位置一样,否则就只能使用受限权限获取了

完整demo参考https://gitee.com/harmonyos_samples/VideoThumbnail中的第二种方式

HarmonyOS 鸿蒙Next photoAccessHelper.PhotoAsset.getThumbnail 不需要受限权限即可使用

在HarmonyOS系统中,photoAccessHelper.PhotoAsset.getThumbnail 方法主要用于获取照片的缩略图。通常情况下,获取照片缩略图并不涉及用户的隐私数据深度访问,因此不需要特别的受限权限。这一操作更多是在用户已经授权应用访问其照片库的基础上进行的,而基础的照片库访问权限并不属于受限权限范畴。

然而,值得注意的是,尽管获取缩略图本身不需要受限权限,但应用在使用相关功能时仍需确保已获得用户的必要授权,并遵守相关的隐私政策和法律法规。此外,开发者在实现该功能时,也应遵循HarmonyOS的开发规范和最佳实践,确保应用的稳定性和安全性。

如果开发者在调用photoAccessHelper.PhotoAsset.getThumbnail方法时遇到问题,建议检查以下几点:

  • 确认应用已获得照片库访问权限。
  • 检查方法调用的参数是否正确。
  • 确认HarmonyOS系统版本与API兼容性。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部