HarmonyOS鸿蒙Next中不调起系统的图片选择,直接获取图库图片列表数据

HarmonyOS鸿蒙Next中不调起系统的图片选择,直接获取图库图片列表数据 根据你提供的HTML内容,转换后的Markdown格式如下:

根据demo:https://developer.huawei.com/consumer/cn/doc/harmonyos-samples/samples-0000001162414961#section194592546719

在api12上的效果是:我只能获取我包名下的文件夹内的图片。具体看我给的demo。

import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { dataSharePredicates } from '@kit.ArkData';
import { Context } from '@kit.AbilityKit';
import Logger from '../common/utils/Logger';

const TAG = 'fu_fu_index';

export default class ImageModel {
  private phAccessHelper: photoAccessHelper.PhotoAccessHelper | null = null;

  constructor(context: Context) {
    this.phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
  }

  async getAllImg(): Promise<photoAccessHelper.PhotoAsset[]> {
    Logger.info(TAG, 'getAllImg');
    let photoList: Array<photoAccessHelper.PhotoAsset> = [];
    if (this.phAccessHelper === null) {
      Logger.info(TAG, 'phAccessHelper fail');
      return photoList;
    }
    let fileKeyType = photoAccessHelper.PhotoKeys.PHOTO_TYPE;
    let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
    Logger.info(TAG, fileKeyType);
    let fetchOptions: photoAccessHelper.FetchOptions = {
      fetchColumns: [],
      predicates: predicates
    };

    try {
      let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> =
        await this.phAccessHelper.getAssets(fetchOptions);
      if (fetchResult != undefined) {
        Logger.info(TAG, 'fetchResult success');
        let photoAsset: Array<photoAccessHelper.PhotoAsset> = await fetchResult.getAllObjects();
        if (photoAsset != undefined && photoAsset.length > 0) {
          Logger.info(TAG, 'length:' + photoAsset.length);
          for (let i = 0; i < photoAsset.length; i++) {
            Logger.info(TAG, 'length:' + photoAsset[i].displayName);
            if (photoAsset[i].photoType === 1) {
              photoList.push(photoAsset[i]);
            }
          }
        }
      }
    } catch (err) {
      Logger.error(TAG, 'getAssets failed, message = ', err);
    }
    Logger.info(TAG, 'photoList success:' + photoList.length);
    return photoList;
  }
}
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import Logger from '../common/utils/Logger';
import ImageModel from './ImageModel';

const TAG: string = 'fu_fu_Index'

@Entry
@Component
struct Index {
  private ImageModel: ImageModel = new ImageModel(getContext(this));
  @State imgDatas: Array<photoAccessHelper.PhotoAsset> = [];

  async aboutToAppear() {
    this.imgDatas = await this.ImageModel.getAllImg();
    Logger.info(TAG, `images = ${this.imgDatas.length}`);
  }

  build() {
    Column() {
      Text('获取图库相册图片数量:' + this.imgDatas.length)
        .fontColor(Color.Black)
        .fontSize(18)
        .height('10%')
      Text('总数量和真实图库中数量对不上,经过观察,好像获取到的是我自己文件夹内容的图片。我怎么获取图库中所有的呢?不拉起图库的情况下.')
        .fontColor(Color.Red)
        .fontSize(18)
        .height('10%')
      Text('我的需求是:不拉起系统调用图库的方法获取所有照片列表数据')
        .fontColor(Color.Red)
        .fontSize(18)
        .height('10%')
      Text('以下是第一张图(不显示就是没有):')
        .fontColor(Color.Black)
        .fontSize(18)
        .height('10%')

      if (this.imgDatas.length > 0) {
        Image(this.imgDatas[0].uri)
          .id('imageShow')
          .width('90%')
          .height('50%')
          .objectFit(ImageFit.Auto)
          .backgroundColor(Color.Pink)
      }
    }
    .width('100%')
    .height('100%')
    .padding({ left: '1%', right: '1%' })
  }
}

我应该怎么修改才能达到我的预期呢?


更多关于HarmonyOS鸿蒙Next中不调起系统的图片选择,直接获取图库图片列表数据的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

你试下添加权限’sohos.permission.READ_IMAGEVIDEO’ ,‘ohos.permission.WRITE_IMAGEVIDEO’

更多关于HarmonyOS鸿蒙Next中不调起系统的图片选择,直接获取图库图片列表数据的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


next系统设计就是让应用只能通过系统的图片选择功能,按需获得图片,否则只能获取应用沙盒环境里的。

在HarmonyOS鸿蒙Next中,若需直接获取图库图片列表数据而不调起系统的图片选择器,可以通过使用@ohos.file.picker模块中的PhotoViewPicker类实现。首先,引入PhotoViewPicker模块,然后创建PhotoViewPicker实例。通过调用select方法并传入相应的参数,可以直接获取图库中的图片列表数据。具体代码如下:

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

let photoPicker = new picker.PhotoViewPicker();
photoPicker.select().then((PhotoSelectResult) => {
  console.info('PhotoSelectResult: ' + JSON.stringify(PhotoSelectResult));
}).catch((err) => {
  console.error('PhotoSelectResult err: ' + JSON.stringify(err));
});

在上述代码中,PhotoViewPickerselect方法会返回一个Promise,解析后得到PhotoSelectResult对象,其中包含了所选图片的URI列表。通过解析这些URI,可以进一步获取图片的详细信息或进行其他操作。此方法无需调起系统的图片选择界面,直接获取图库中的图片数据。

在HarmonyOS Next中,若需直接获取图库图片列表数据而不调起系统图片选择器,可以通过MediaLibrary API实现。首先,获取MediaLibrary实例,然后使用getFileAssets方法查询图片文件。通过设置查询条件,如MediaType.IMAGE,可以过滤出所有图片文件。最后,遍历结果获取图片的URI或路径。此方法适用于需要批量处理或展示图片的场景。

回到顶部