HarmonyOS 鸿蒙Next 获取系统相册的数据

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

HarmonyOS 鸿蒙Next 获取系统相册的数据

我们想实现将下载的图片和视频直接保存到系统相册,然后我们的应用能够访问系统相册,并获取我们应用保存的所有图片和视频。请问这种需求能否在鸿蒙系统上实现?如果可以,是否有相关的示例代码或Demo可以参考?

2 回复

读取相册中的图片可参考如下demo:

import photoAccessHelper from '@ohos.file.photoAccessHelper';
import image from '@ohos.multimedia.image';
import fs from '@ohos.file.fs';

@Entry
@Component
struct Index {
  @State getAlbum: string = '显示相册中的图片';
  @State pixel: image.PixelMap | undefined = undefined;
  @State albumPath: string = '';
  @State photoSize: number = 0;
  // @State img:ImageSource = $r('app.media.app_icon')

  async getPictureFromAlbum(){
    // 拉起相册,选择图片
    let PhotoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
    PhotoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
    PhotoSelectOptions.maxSelectNumber = 1;
    let photoPicker = new photoAccessHelper.PhotoViewPicker();
    let photoSelectResult: photoAccessHelper.PhotoSelectResult = await photoPicker.select(PhotoSelectOptions);
    this.albumPath = photoSelectResult.photoUris[0];

    // 读取图片为buffer
    const file = fs.openSync(this.albumPath, fs.OpenMode.READ_WRITE);
    this.photoSize = fs.statSync(file.fd).size;
    console.info('Photo Size: ' + this.photoSize);
    let buffer = new ArrayBuffer(this.photoSize);
    fs.readSync(file.fd, buffer);
    fs.closeSync(file);

    // 解码成PixelMap
    const imageSource = image.createImageSource(buffer);
    console.log('imageSource: ' + JSON.stringify(imageSource));
    this.pixel = await imageSource.createPixelMap({});
  }

  build() {
    Row() {
      Column() {
        Image(this.pixel)
          .width('100%')
          .aspectRatio(1)
        Button('显示照片')
          .onClick(()=>{
            this.getPictureFromAlbum()
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

在HarmonyOS(鸿蒙)Next系统中,获取系统相册的数据通常涉及访问设备的媒体存储,这需要遵循鸿蒙系统的权限管理和数据存储规范。以下是获取系统相册数据的基本步骤概述:

  1. 权限申请:首先,你的应用需要在manifest.json文件中声明访问存储的权限,如ohos.permission.READ_MEDIA。并在运行时向用户请求这些权限。

  2. 使用MediaStore API:鸿蒙系统提供了类似Android的MediaStore API,用于访问媒体文件。你可以通过查询MediaStore来获取相册中的图片和视频信息。

  3. 处理查询结果:使用ContentResolver执行查询后,处理返回的Cursor,从中提取图片的URI、标题、日期等信息。

  4. 展示数据:将获取到的数据加载到你的应用中,如使用RecyclerView或ListView展示图片缩略图。

请注意,鸿蒙系统的API可能会随着版本更新而有所变化,建议查阅最新的鸿蒙开发文档以确保代码兼容性。

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

回到顶部