前言

在OpenHarmony应用开发中,应用内跳转到系统图库详情页是比较常见的需求。本文会具体介绍如何开发此功能。

开发环境

ohos设备: DAYU200

ohos系统: OpenHarmony 6.0.0.47

IDE: DevEco Studio 6.0.0 Release(Build Version: 6.0.0.858)

OpenHarmony SDK: ohos-sdk-full(6.0.0.47) (api20)

最佳实践示例

import { WinsleiLogManager } from '@winslei/winsleilog'
import dataSharePredicates from '@ohos.data.dataSharePredicates';
import photoAccessHelper from '@ohos.file.photoAccessHelper';
import { common } from '@kit.AbilityKit';

const TAG = 'MediaLibraryTest3'

@Entry
@Component
struct MediaLibraryTest3 {

  private context = getContext(this)
  private phAccessHelper = photoAccessHelper.getPhotoAccessHelper(this.context);

  private uri: string = ''

  build() {
    Column({ space: 20 }) {
      Button('获取第一个相册的第一张图片')
        .onClick(async (event) => {
          let photoPredicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
          let photoFetchOptions: photoAccessHelper.FetchOptions = {
            fetchColumns: [],
            predicates: photoPredicates
          };

          try {
            let photoFetchResult = await this.phAccessHelper.getAssets(photoFetchOptions);
            let photoAsset = await photoFetchResult.getFirstObject();
            WinsleiLogManager.hilogIWithTag(TAG, 'getFirstPhoto. photoAsset:' + JSON.stringify(photoAsset))
            this.uri = photoAsset.uri
            WinsleiLogManager.hilogIWithTag(TAG, 'getFirstPhoto. photoAsset.uri:' + JSON.stringify(this.uri))
            photoFetchResult.close();
          } catch (err) {
            WinsleiLogManager.hilogIWithTag(TAG, 'getFirstPhoto. err:' + JSON.stringify(err))
          }
        })

      Button('跳转到图库')
        .onClick(() => {
          let photoContext = this.context as common.UIAbilityContext;
          photoContext.startAbility({
            parameters: { uri: this.uri },
            action: 'ohos.want.action.viewData',
            bundleName: 'com.ohos.photos',
            abilityName: 'com.ohos.photos.MainAbility'
          }).catch(() => {
            WinsleiLogManager.hilogIWithTag(TAG, 'startAbility failed.')
          })
        })
    }
    .height('100%')
    .width('100%')
  }
}

FAQ

为什么上述示例在hos系统上效果异常

hos和ohos的系统图库的包名不一致,如果需要在hos上正常运行,需要将abilityNamebundleName分别改为com.huawei.hmos.photocom.huawei.hmos.photos.MainAbility

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐