1 申请权限
获取用户相册首次授权需要申请权限
// 1 程序访问控制管理
const AtManager = abilityAccessCtrl.createAtManager()
// 2 向用户申请权限
const resultResult = await AtManager.requestPermissionsFromUser(getContext(), permissions)
两种情况 :
- 用户首次授权同意授权->完成
- 用户拒绝授权->提示去设置页面开启
使用
promptAction.showDialog弹出提示框 让用户选择取消还是去设置界面开启权限
promptAction.showDialog({
alignment: DialogAlignment.Center,
title: '温馨提示',
message: '手机瘦身功能需要获取权限,请在系统设置中打开相册开关',
buttons: [
{ text: '取消', color: $r('app.color.font_sub') },
{ text: '立即开启', color: $r('app.color.brand') }
]
})
用户点击取消按钮表示授权失败
用户点击立刻开启 则跳转至设置界面让用户手动开启权限(用户点击了取消按钮 鸿蒙没有内置的API修改,需要手动去设置页面修改) 核心API context.startAbility
// 1 获取 context 对象 ,并通过 as 断言 为 UIAbilityContext,UIAbilityContext 才能调用 startAbility 这个 API
const context =getContext() as common.UIAbilityContext
// 3 获取 bundleInfo 应用包信息 动态信息获取 APP Scope/app.json5中的配置的包信息
const bundleInfo = bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)
// 2 启动一个设置页(应用)
context.startAbility({
// 打开设置页的固定写法(Harmony os Next 文档中有)
bundleName: 'com.huawei.hmos.settings',
abilityName: 'com.huawei.hmos.settings.MainAbility',
uri: 'application_info_entry',
parameters:{
// 安装包名 打开指定应用的详情页面
pushParams:bundleInfo.name
}
2 获取图片信息
应用通过调用PhotoAccessHelper.getAssets获取媒体资源
核心API
phAccessHelper.getAssets
// 获取相册管理模块的实例,用于访问和修改相册中的媒体文件。
let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(getContext())
// 查询条件
let predicates = new dataSharePredicates.DataSharePredicates()
// 获取图片和视频资源 核心 API: getAssets,
let fetchResult = await phAccessHelper.getAssets({
fetchColumns: [], // 检索条件,指定列名查询,如果该参数为空时默认查询uri、name、photoType
predicates: predicates // 谓词查询,显示过滤条件。
})
// 获取第一 图片/视频 资源
let photoAsset = await fetchResult.getFirstObject()
| fetchResult图片/视频 资源 | |
|---|---|
| getFirstObject | 获取第一张 |
| getNextObject | 获取下一张 |
| getLastObject | 获取最后一张 |
| getObjectByPosition | 获取下标索引的图片 |
| getAllObject | 获取全部 |
fetchResult.getFirstObject()只能获取到 图片/视频 地址(uri),图片名称(displayName),图片类型(photoType)
fetchColumns 文件关键信息 文档链接
如果需要其他枚举需要使用.get
注意 :fetchColumns 和 get 里面的枚举需要一致 否则不显示
使用如下 (举例: "size","date_added")
fetchColumns: [
photoAccessHelper.PhotoKeys.SIZE, // 获取文件大小 单位KB
photoAccessHelper.PhotoKeys.DATE_ADDED// 获取日期
]
--------------------------
let photoAsset = await fetchResult.getFirstObject()
let size = photoAsset.get(photoAccessHelper.PhotoKeys.SIZE) as number
let added = photoAssrt.get( photoAccessHelper.PhotoKeys.DATE_ADDED)as string
3 删除图片(放入回收站)
删除图片 核心API deleteAssets(11+版本)
通过 MediaAssetChangeRequest.deleteAssets 可以将文件放入回收站
实现步骤
- 建立搜索条件 用于获取图片资源
- 调用
photoAccessHelper.getAssets接口获取目标图片资源 - 调用getFirstObbject/getAllObjects接口获取图片 将要放入回收站的对象 (以上步骤和获取图片 相同)
- 调用
MediaAssetChangeRequest.deleteAssets接口将文件放入回收站
// 1 找到待删除的图片资源 PhotoAsset
// 1.1 获取相册管理块的实列
let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(getContext())
// 1.2 准备查询条件
let Predicates = new dataSharePredicates.DataSharePredicates
// 1.3 获取资源,返回值类型为
let fetchResult = await phAccessHelper.getAssets({
fetchColumns: [],
predicates: Predicates
})
// 1.4 获取图片资源 删除图片 API 的第二个参数 photoAccessHelper.PhotoAsset[]
let photoAsset = await fetchResult.getFirstObject()
// 2 核心API 调用 deleteAssets 实现删除
photoAccessHelper.MediaAssetChangeRequest.deleteAssets(getContext(), [photoAsset])
老版本APIcreateDeleteRequest 版本更新后可能被废除 需要换新版本的API
4 获取相册信息
核心API getAlbums 必填参数 type相册类型 subtype相册子类型
参考链接 docs.openharmony.cn/pages/v4.1/…
// 获取相册管理模块的实例,用于访问和修改相册中的媒体文件。
let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(getContext())
// getAssets 获取 图片/视频
// fetAlbums 获取 图片
let fetchResult = await phAccessHelper.getAlbums(
photoAccessHelper.AlbumType.USER, // 一级相册类型 -> 用户相册系统相册
photoAccessHelper.AlbumSubtype.USER_GENERIC // 二级相册类型 -> 用户相册 收藏夹 等
)
// 获取第一个对象
const album = await fetchResult.getFirstObject()
返回结果
以上就是我对 1 申请权限 2 获取图片/视频(文件信息) 3 删除图片 4 获取相册 的个人见解 本人小白一名 如有错的地方 敬请谅解 欢迎大家补充 感谢