当前位置: 首页 > news >正文

HarmonyOS 应用开发《掌上英语》第35篇:媒体资源变更通知相关指导

媒体资源变更通知相关指导

photoAccessHelper提供监听指定媒体资源变更的接口。

说明:

在进行功能开发前,请查阅开发准备,了解如何获取相册管理模块实例和如何申请相册管理模块功能开发相关权限。
文档中使用到photoAccessHelper的地方默认为使用开发准备中获取的对象,如未添加此段代码报photoAccessHelper未定义的错误请自行添加。

媒体资源变更通知相关接口的异步调用仅支持使用callback方式。以下只列出部分接口使用方式,其他使用方式可以查阅模块描述。

如无特别说明,文档中涉及的待获取资源均视为已预置且数据库中存在相应数据。若按示例代码执行后资源为空,请确认文件是否已预置,以及数据库中是否存在该文件的数据。

监听指定URI

通过调用registerChange接口监听指定uri。当被监听对象发生变更时返回监听器回调函数的值。

对指定PhotoAsset注册监听

对指定PhotoAsset注册监听,当监听的PhotoAsset发生变更时,返回回调。

前提条件

  • 获取相册管理模块photoAccessHelper实例。
  • 申请相册管理模块功能相关权限’ohos.permission.READ_IMAGEVIDEO’和’ohos.permission.WRITE_IMAGEVIDEO’。

以对一张图片注册监听为例,通过删除图片触发回调。

开发步骤

  1. 获取指定媒体资源。
  2. 对指定PhotoAsset注册监听。
  3. 将指定媒体资源删除。
import { dataSharePredicates } from '@kit.ArkData'; import { photoAccessHelper } from '@kit.MediaLibraryKit'; // ... async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) { let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); predicates.equalTo(photoAccessHelper.PhotoKeys.DISPLAY_NAME, 'test.jpg'); let fetchOptions: photoAccessHelper.FetchOptions = { fetchColumns: [], predicates: predicates }; try { let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOptions); let photoAsset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject(); console.info('getAssets photoAsset.uri : ' + photoAsset.uri); let onCallback = (changeData: photoAccessHelper.ChangeData) => { console.info('onCallback successfully, changeData: ' + JSON.stringify(changeData)); } phAccessHelper.registerChange(photoAsset.uri, false, onCallback); await photoAccessHelper.MediaAssetChangeRequest.deleteAssets(context, [photoAsset]); fetchResult.close(); // ... } catch (err) { console.error('onCallback failed with err: ' + err); // ... } }

对指定Album注册监听

对指定Album注册监听,当Album发生变更时,触发监听回调。

前提条件

  • 获取相册管理模块photoAccessHelper实例。
  • 申请相册管理模块功能相关权限’ohos.permission.READ_IMAGEVIDEO’和’ohos.permission.WRITE_IMAGEVIDEO’。

以对一个用户相册注册监听为例,通过重命名相册触发回调。

开发步骤

  1. 获取用户相册。
  2. 对指定Album注册监听。
  3. 将指定用户相册重命名。
import { dataSharePredicates } from '@kit.ArkData'; import { photoAccessHelper } from '@kit.MediaLibraryKit'; // ... async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper) { let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); let albumName: photoAccessHelper.AlbumKeys = photoAccessHelper.AlbumKeys.ALBUM_NAME; predicates.equalTo(albumName, 'test'); let fetchOptions: photoAccessHelper.FetchOptions = { fetchColumns: [], predicates: predicates }; try { let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums( photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, fetchOptions); let album: photoAccessHelper.Album = await fetchResult.getFirstObject(); console.info('getAlbums successfully, albumUri: ' + album.albumUri); let onCallback = (changeData: photoAccessHelper.ChangeData) => { console.info('onCallback successfully, changeData: ' + JSON.stringify(changeData)); } phAccessHelper.registerChange(album.albumUri, false, onCallback); album.albumName = 'newAlbumName' + Date.now(); await album.commitModify(); fetchResult.close(); // ... } catch (err) { console.error('onCallback failed with err: ' + err); // ... } }

模糊监听

  1. 通过设置forChildUris值为true来注册模糊监听,uri为相册uri时,forChildUris为true能监听到相册中文件的变化,如果是false只能监听相册本身变化。
  2. uri为photoAsset时,forChildUris为true、false没有区别。
  3. uri为DefaultChangeUri时,forChildUris必须为true,如果为false将找不到该uri,收不到任何消息。

对所有PhotoAsset注册监听

对所有PhotoAsset注册监听,当被监听的PhotoAsset发生变更时,返回监听回调。

前提条件

  • 获取相册管理模块photoAccessHelper实例。
  • 申请相册管理模块功能相关权限’ohos.permission.READ_IMAGEVIDEO’和’ohos.permission.WRITE_IMAGEVIDEO’。

下面以对所有PhotoAsset注册监听,通过将被监听的PhotoAsset删除触发监听回调为例。

开发步骤

  1. 对所有PhotoAsset注册监听。
  2. 获取指定媒体资源。
  3. 将指定媒体资源删除。
import { dataSharePredicates } from '@kit.ArkData'; import { photoAccessHelper } from '@kit.MediaLibraryKit'; // ... async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) { let onCallback = (changeData: photoAccessHelper.ChangeData) => { console.info('onCallback successfully, changeData: ' + JSON.stringify(changeData)); } phAccessHelper.registerChange(photoAccessHelper.DefaultChangeUri.DEFAULT_PHOTO_URI, true, onCallback); let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); let fetchOptions: photoAccessHelper.FetchOptions = { fetchColumns: [], predicates: predicates }; try { let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOptions); let photoAsset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject(); console.info('getAssets photoAsset.uri : ' + photoAsset.uri); await photoAccessHelper.MediaAssetChangeRequest.deleteAssets(context, [photoAsset]); fetchResult.close(); // ... } catch (err) { console.error('onCallback failed with err: ' + err); // ... } }

取消对指定URI的监听

取消对指定uri的监听,通过调用unRegisterChange接口取消对指定uri的监听。一个uri可以注册多个监听,存在多个callback监听时,可以取消指定注册的callback的监听;不指定callback时取消该uri的所有监听。

前提条件

  • 获取相册管理模块photoAccessHelper实例。
  • 申请相册管理模块功能相关权限’ohos.permission.READ_IMAGEVIDEO’和’ohos.permission.WRITE_IMAGEVIDEO’。

下面以取消对图片指定的监听为例,取消监听后,删除图片不再触发对应的监听回调。

开发步骤

  1. 获取指定媒体资源。
  2. 取消对指定媒体资源uri的监听。
  3. 将指定媒体资源删除。
import { dataSharePredicates } from '@kit.ArkData'; import { photoAccessHelper } from '@kit.MediaLibraryKit'; // ... async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) { let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); predicates.equalTo(photoAccessHelper.PhotoKeys.DISPLAY_NAME, 'test.jpg'); let fetchOptions: photoAccessHelper.FetchOptions = { fetchColumns: [], predicates: predicates }; try { let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOptions); let photoAsset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject(); console.info('getAssets photoAsset.uri : ' + photoAsset.uri); let onCallback1 = (changeData: photoAccessHelper.ChangeData) => { console.info('onCallback1, changeData: ' + JSON.stringify(changeData)); } let onCallback2 = (changeData: photoAccessHelper.ChangeData) => { console.info('onCallback2, changeData: ' + JSON.stringify(changeData)); } phAccessHelper.registerChange(photoAsset.uri, false, onCallback1); phAccessHelper.registerChange(photoAsset.uri, false, onCallback2); phAccessHelper.unRegisterChange(photoAsset.uri, onCallback1); await photoAccessHelper.MediaAssetChangeRequest.deleteAssets(context, [photoAsset]); fetchResult.close(); // ... } catch (err) { console.error('onCallback failed with err: ' + err); // ... } }
http://www.jsqmd.com/news/1342047/

相关文章:

  • 椰林海鲜码头企业文化是什么 - 松梢月冷
  • 如何在C项目中快速集成µnit?5分钟上手教程
  • 如何通过scene-editor构建专业级3D场景:从模块化架构到可视化实践
  • 从ChatML到工具调用:LFM2.5-2.6B对话模板深度解析
  • 长期自用|MX Player 安卓老牌全能播放器,本地影音播放的靠谱选择
  • 10分钟上手gatsby-starter-bee:新手必备的博客搭建教程
  • DeepSeek-V4-Flash-NVFP4 vs 原版模型:量化前后性能与效率对比分析
  • 如何用Chronos-2-Synth实现高精度时间序列预测?新手入门全指南
  • 椰林海鲜码头企业愿景是什么 - 晚香时候
  • User Flows完全上手:从安装到创建第一个交互流程图的完整教程
  • 2026年晋城武术培训机构推荐:选校避坑指南:如何识别正规武校 - 圣龙武术朱老师
  • Navicat合法使用与替代方案指南
  • 2026最新版全面解析膜厚测量仪从售后服务体系看:生产厂商
  • 打造个性化网易云音乐:杜比大喇叭β版界面美化功能使用教程
  • 如何从零开始建设电影网站视频平台并实现流量变现的深度实战指南
  • 解决MetaMask登录难题:login-with-metamask常见问题与解决方案
  • 匹米替比(Pimitespib):胃肠道间质瘤(GIST)HSP90抑制剂,四线治疗突破为患者带来新生机
  • 滨州透明胶带有哪些常见尺寸
  • OpenSpace云服务集成指南:无缝扩展AI Agent能力的终极方案
  • 财务还在手工录单?2026年企业银企直连ERP实施服务商到底该怎么选
  • 从0到1:apt-sources-cleanup项目架构与核心组件详解
  • 搞懂豆包图片去水印方法,用对AI图片去水印工具方法更省心 - 免费软件工具方法教程
  • 如何在Android设备上安装和配置NeoTerm:从零开始的完整指南
  • 数据库霸占的C盘空间
  • 贝叶斯优化CNN-BiLSTM的锂电池SOH预测附Matlab代码
  • 普乐司兰钠Plozasiran治疗家族性乳糜微粒血症综合征真实案例
  • 哪家化工配方还原机构靠谱?2026全国实测指南,教你避开行业套路 - 优质品牌中立测评推荐
  • 语音分离效率革命:TIGER-speech如何实现95%计算量削减?
  • Spark与TiDB集成:实时数据分析与TiSpark实战指南
  • 5分钟上手AgentRC:从安装到生成首份AI指令文件的快速教程