阅读(1604) (0)

鸿蒙OS 媒体存储数据操作开发指导

2020-09-17 09:23:16 更新

场景介绍

媒体存储是提供了操作媒体图片、视频、音频等元数据的Uri 链接信息。

接口说明

接口名 描述
appendPendingResource(Uri uri) 更新给定的 Uri,用于处理包含待处理标记的媒体项。
appendRequireOriginalResource(Uri uri) 更新给定的 Uri, 用于调用者获取原始文件内容。
fetchVolumeName(Uri uri) 获取给定 Uri 所属的卷名。
fetchExternalVolumeNames(Context context) 获取所有组成 external 的特定卷名的列表。
fetchMediaResource(Context context, Uri documentUri) 根据文档式的 Uri 获取对应的媒体式的Uri。
fetchDocumentResource(Context context, Uri mediaUri) 根据媒体式的 Uri 获取对应的文档式的Uri。
fetchVersion(Context context) 获取卷名为 external_primary 的不透明版本信息。
fetchVersion(Context context, String volumeName) 获取指定卷名的不透明版本信息。
fetchLoggerResource() 获取用于查询媒体扫描状态的 Uri。
Audio.convertNameToKey(String name) 将艺术家或者专辑名称转换为可用于分组,排序和搜索的“key”。
Audio.Media.fetchResource(String volumeName) 获取用于处理音频媒体信息的 Uri。
Audio.Genres.fetchResource(String volumeName) 获取用于处理音频流派信息的 Uri。
Audio.Genres.fetchResourceForAudioId(String volumeName, int audioId) 获取用户处理音频文件对应的流派信息的 Uri。
Audio.Genres.Members.fetchResource(String volumeName, long genreId) 获取用于处理音频流派子目录的成员信息的 Uri。
Audio.Playlists.fetchResource(String volumeName) 获取用于处理音频播放列表信息的 Uri。
Audio.Playlists.Members.fetchResource(String volumeName, long playlistId) 获取用于处理音频播放列表子目录的成员信息的 Uri。
Audio.Playlists.Members.updatePlaylistItem(DataAbilityHelper dataAbilityHelper, long playlistId, int oldLocation, int newLocation) 移动播放列表到新位置。
Audio.Albums.fetchResource(String volumeName) 获取用于处理音频专辑信息的 Uri。
Audio.Artists.fetchResource(String volumeName) 获取用于处理音频艺术家信息的 Uri。
Audio.Artists.Albums.fetchResource(String volumeName, long id) 获取用于处理所有专辑出现艺术家的歌曲信息的 Uri。
Audio.Downloads.fetchResource(String volumeName) 获取用于处理下载条目信息的 Uri。
Audio.Files.fetchResource(String volumeName) 获取用于处理媒体文件及非媒体文件(文本,HTML,PDF等)的 Uri。
Audio.Images.Media.fetchResource(String volumeName) 获取用于处理图像媒体信息的 Uri。
Audio.Video.Media.fetchResource(String volumeName) 获取用于处理视频媒体信息的 Uri。

开发步骤

以播放视频文件为例:

  1. 获取媒体外部存储提供的Uri链接。

   AVStorage.Video.Media.EXTERNAL_DATA_ABILITY_URI

  1. 根据媒体存储提供的Uri链接操作媒体元数据。

   DataAbilityHelper helper = getDataAbilityHelper(context);
   try {
       DataAbilityPredicates predicates = new DataAbilityPredicates();
       // 设置查询过滤条件
       predicates.equalTo(AVStorage.Video.Media.DATA, "xxxxx");
        // columns为null,查询记录所有字段,当前例子表示查询id字段
       ResultSet result = helper.query(AVStorage.Video.Media.EXTERNAL_DATA_ABILITY_URI, new String[]{AVStorage.Video.Media.ID}, predicates);
       if (result == null) {
           return;
       }
       while (result.goToNextRow()) {
           result.getInt(result.getColumnIndexForName(AVStorage.Video.Media.ID)); // 获取id字段的值
       }
       result.close();
   } catch (DataAbilityRemoteException e) {
       // ...
   }

  1. 获取到媒体 ID 后,即可通过设置媒体源来进行业务操作,如:播放。

   Uri uri = Uri.appendEncodedPathToUri​(AVStore.Video.Media.EXTERNAL_DATA_ABILITY_URI, String.valueOf(id)); // id为步骤2获取到的id
   Player player = new Player(context);
   DataAbilityHelper helper = getDataAbilityHelper(context);
   player.setSource(new Source(helper.openFile(uri, "r")));