尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

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

HarmonyOS 应用开发《掌上英语》第35篇:媒体资源变更通知相关指导 媒体资源变更通知相关指导photoAccessHelper提供监听指定媒体资源变更的接口。说明在进行功能开发前请查阅开发准备了解如何获取相册管理模块实例和如何申请相册管理模块功能开发相关权限。文档中使用到photoAccessHelper的地方默认为使用开发准备中获取的对象如未添加此段代码报photoAccessHelper未定义的错误请自行添加。媒体资源变更通知相关接口的异步调用仅支持使用callback方式。以下只列出部分接口使用方式其他使用方式可以查阅模块描述。如无特别说明文档中涉及的待获取资源均视为已预置且数据库中存在相应数据。若按示例代码执行后资源为空请确认文件是否已预置以及数据库中是否存在该文件的数据。监听指定URI通过调用registerChange接口监听指定uri。当被监听对象发生变更时返回监听器回调函数的值。对指定PhotoAsset注册监听对指定PhotoAsset注册监听当监听的PhotoAsset发生变更时返回回调。前提条件获取相册管理模块photoAccessHelper实例。申请相册管理模块功能相关权限’ohos.permission.READ_IMAGEVIDEO’和’ohos.permission.WRITE_IMAGEVIDEO’。以对一张图片注册监听为例通过删除图片触发回调。开发步骤获取指定媒体资源。对指定PhotoAsset注册监听。将指定媒体资源删除。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.FetchResultphotoAccessHelper.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’。以对一个用户相册注册监听为例通过重命名相册触发回调。开发步骤获取用户相册。对指定Album注册监听。将指定用户相册重命名。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.FetchResultphotoAccessHelper.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); // ... } }模糊监听通过设置forChildUris值为true来注册模糊监听uri为相册uri时forChildUris为true能监听到相册中文件的变化如果是false只能监听相册本身变化。uri为photoAsset时forChildUris为true、false没有区别。uri为DefaultChangeUri时forChildUris必须为true如果为false将找不到该uri收不到任何消息。对所有PhotoAsset注册监听对所有PhotoAsset注册监听当被监听的PhotoAsset发生变更时返回监听回调。前提条件获取相册管理模块photoAccessHelper实例。申请相册管理模块功能相关权限’ohos.permission.READ_IMAGEVIDEO’和’ohos.permission.WRITE_IMAGEVIDEO’。下面以对所有PhotoAsset注册监听通过将被监听的PhotoAsset删除触发监听回调为例。开发步骤对所有PhotoAsset注册监听。获取指定媒体资源。将指定媒体资源删除。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.FetchResultphotoAccessHelper.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’。下面以取消对图片指定的监听为例取消监听后删除图片不再触发对应的监听回调。开发步骤获取指定媒体资源。取消对指定媒体资源uri的监听。将指定媒体资源删除。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.FetchResultphotoAccessHelper.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); // ... } }
返回列表