OpenHarmony开发者论坛

标题: OpenHarmony应用访问相册和图片 [打印本页]

作者: sunlian    时间: 2023-12-18 11:07
标题: OpenHarmony应用访问相册和图片
[md]# 简介

```
使用[@ohos.file.photoAccessHelper](https://gitee.com/openharmony/do ... hotoAccessHelper.md)
接口,可以实现查看系统相册、创建用户相册、查看相册照片、用户相册文件添加和删除、以及预览图片、最近删除、收藏夹操作等功能。
```

# 环境

```
1. 支持标准系统上运行,支持设备:RK3568;
2. 支持API10版本SDK,版本号:4.0.9.1,镜像版本号:OpenHarmony 4.0.9.1,需要手动替换Full SDK才能编译通过,具体操作可参考[替换指南](https://docs.openharmony.cn/page ... dk-switch-guide.md/);
3. 本示例需要使用DevEco Studio 3.1 Release (Build Version: 3.1.0.500)才可编译运行,需要配置"apl":"system_basic"才可安装成功;
```

# 代码示例

### 权限

ohos.permission.READ\_IMAGEVIDEO、 ohos.permission.WRITE\_IMAGEVIDEO

```
import photoAccessHelper from '@ohos.file.photoAccessHelper';
import dataSharePredicates from '@ohos.data.dataSharePredicates';
```

### 创建相册

```
async createAlbum(albumName: string): Promise<SimpleAlbumDataItem> {
    let newAlbum: SimpleAlbumDataItem = undefined;
    try {
      let album = await this.userFileMgr.createAlbum(albumName);
      newAlbum = new SimpleAlbumDataItem(MediaConstants.ALBUM_ID_USER, albumName, album.albumUri,
        '', '', MediaConstants.ALBUM_TYPE_USER, MediaConstants.ALBUM_SUBTYPE_USER_GENERIC);
    } catch (err) {
      Log.error(TAG, 'createAlbum failed with error: ' + err);
    }
    return newAlbum;
  }
```

### 查询相册

```
async getAlbums(fetchOption: photoAccessHelper.FetchOptions): Promise<photoAccessHelper.Album[]> {
    Log.info(TAG, 'getAlbums');
    let albums: photoAccessHelper.Album[] = [];
    try {
      albums = await this.userFileMgr.getAlbums(fetchOption);
      Log.info(TAG, 'getAlbums albums ' + albums.getCounts());
    } catch (err) {
      Log.error(TAG, 'getAlbums error:' + JSON.stringify(err));
    }
    Log.debug(TAG, 'getAlbums finish');
    return albums;
  }
```

### 通过相册类型查询媒体文件

```
async getAllMediaItemsByType(type: number, subType: number, albumFetchOption, fileFetchOption): Promise<photoAccessHelper.PhotoAsset[]> {
    let fileAssets: photoAccessHelper.PhotoAsset[] = [];
    let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = null;
    try {
      Log.info(TAG, 'getAllMediaItemsByUserFile');
      Log.info(TAG, 'type:' + type);
      Log.info(TAG, 'subType:' + subType);
      if (type === photoAccessHelper.AlbumType.USER && albumFetchOption != null) {
        Log.info(TAG, 'albumFetchOption != null');
        fetchResult = await this.userFileMgr.getAlbums(type, subType, albumFetchOption);
      } else {
        fetchResult = await this.userFileMgr.getAlbums(type, subType);
      }
      Log.info(TAG, 'get Album fetchResult, count: ' + fetchResult.getCount());
      for (let i = 0; i < fetchResult.getCount(); i++) {
        let albumAsset: photoAccessHelper.Album = await fetchResult.getObjectByPosition(i);
        let photoFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = null;
        try {
          photoFetchResult = await albumAsset.getAssets(fileFetchOption);
          for (let i = 0; i < photoFetchResult.getCount(); i++) {
            let photoAsset = await photoFetchResult.getObjectByPosition(i);
            fileAssets.push(photoAsset);
            Log.info(TAG, 'getPhotoAssets successfully, file displayName: ' + photoAsset.displayName);
          }
        } catch (err) {
          Log.info(TAG, 'get Album getPhotoAssets failed with err: ' + err);
        } finally {
          if (photoFetchResult != null) {
            photoFetchResult.close();
          }
        }
      }
    } catch (err) {
      Log.error(TAG, 'get Album fetchResult failed with err: ' + err);
    } finally {
      if (fetchResult != null) {
        fetchResult.close();
      }
    }
    Log.info(TAG, 'fileAssets: ' + fileAssets.length);
    return fileAssets;
  }
```

### 相册类型和子类型定义

##### AlbumType

枚举,相册类型,表示是用户相册还是系统预置相册。

**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core

| 名称   | 值   | 说明           |
| ------ | ---- | -------------- |
| USER   | 0    | 用户相册。     |
| SYSTEM | 1024 | 系统预置相册。 |

##### AlbumSubtype

枚举,相册子类型,表示具体的相册类型。

**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core

| 名称          | 值         | 说明                                                             |
| ------------- | ---------- | ---------------------------------------------------------------- |
| USER\_GENERIC | 1          | 用户相册。                                                       |
| FAVORITE      | 1025       | 收藏夹。                                                         |
| VIDEO         | 1026       | 视频相册。                                                       |
| HIDDEN        | 1027       | 隐藏相册。**系统接口**:此接口为系统接口。                 |
| TRASH         | 1028       | 回收站。**系统接口**:此接口为系统接口。                   |
| SCREENSHOT    | 1029       | 截屏和录屏相册。**系统接口**:此接口为系统接口。           |
| CAMERA        | 1030       | 相机拍摄的照片和视频相册。**系统接口**:此接口为系统接口。 |
| ANY           | 2147483647 | 任意相册。                                                       |
[/md]




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5