HarmonyOS鸿蒙Next中不调起系统的图片选择,直接获取图库图片列表数据
HarmonyOS鸿蒙Next中不调起系统的图片选择,直接获取图库图片列表数据 根据你提供的HTML内容,转换后的Markdown格式如下:
在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
你试下添加权限’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));
});
在上述代码中,PhotoViewPicker的select方法会返回一个Promise,解析后得到PhotoSelectResult对象,其中包含了所选图片的URI列表。通过解析这些URI,可以进一步获取图片的详细信息或进行其他操作。此方法无需调起系统的图片选择界面,直接获取图库中的图片数据。
在HarmonyOS Next中,若需直接获取图库图片列表数据而不调起系统图片选择器,可以通过MediaLibrary API实现。首先,获取MediaLibrary实例,然后使用getFileAssets方法查询图片文件。通过设置查询条件,如MediaType.IMAGE,可以过滤出所有图片文件。最后,遍历结果获取图片的URI或路径。此方法适用于需要批量处理或展示图片的场景。

