HarmonyOS-鸿蒙app开发 —基于java媒体存储数据操作开发指导

HarmonyOS-鸿蒙app开发 —基于java媒体存储数据操作开发指导

场景介绍

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

接口说明

表1 媒体存储相关类AVStorage的主要接口

接口名

描述

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。

Downloads.fetchResource(String volumeName)

获取用于处理下载条目信息的Uri。

Files.fetchResource(String volumeName)

获取用于处理媒体文件的Uri。

Images.Media.fetchResource(String volumeName)

获取用于处理图像媒体信息的Uri。

Video.Media.fetchResource(String volumeName)

获取用于处理视频媒体信息的Uri。

开发步骤

以播放视频文件为例:

获取媒体外部存储中的视频URI需要使用的预定义字段是:AVStorage.Video.Media.EXTERNAL_DATA_ABILITY_URI

查询数据前需要动态授予权限:”ohos.permission.READ_MEDIA”

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

Context context = getContext();
DataAbilityHelper helper = DataAbilityHelper.creator(context);
try {
DataAbilityPredicates dataAbilityPredicates = new DataAbilityPredicates(“_id>?”);
dataAbilityPredicates.setWhereArgs(Arrays.asList(“0”));
Uri myUri = AVStorage.Video.Media.EXTERNAL_DATA_ABILITY_URI;
// columns为null,查询记录所有字段,当前例子表示查询id字段
ResultSet result = helper.query(myUri, null, dataAbilityPredicates);
if (result == null) {
return;
}
while (result.goToNextRow()) {
int id = result.getInt(result.getColumnIndexForName(AVStorage.Video.Media.ID));// 获取id字段的值
} catch (DataAbilityRemoteException e) {
// …
}
}

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

Uri uri = Uri.appendEncodedPathToUri​(AVStorage.Video.Media.EXTERNAL_DATA_ABILITY_URI, String.valueOf(id)); // id为步骤1获取到的id
Context context = getContext();
Player player = new Player(context);
DataAbilityHelper helper = DataAbilityHelper.creator(context);
player.setSource(new Source(helper.openFile(uri, “r”)));
player.prepare();
player.play();

    0 0 投票数
    文章评分
    订阅评论
    提醒
    0 评论
    最旧
    最新 最多投票
    内联反馈
    查看所有评论
    0
    希望看到您的想法,请您发表评论x