MediaHelper 媒体助手扩展
介绍
此扩展是对 Android MediaMetadataRetriever 类的包装,能够从媒体文件中提取元数据,包括来自本地物理文件和流媒体文件(如 https://...mp3)。

主要功能
- 从本地和在线媒体文件提取元数据
- 处理专辑封面图像(提取、调整大小、保存)
- 文件管理操作(获取目录、删除文件等)
- 支持同步和异步数据加载
下载
.aix拓展文件:
de.ullisroboterseite.ursai2mediahelper.aix
.aia示例文件:
版本历史
| 版本 | 日期 | 修改内容 |
|---|---|---|
| 1.0 | 2021-07-06 | 初始版本 |
| 1.1 | 2024-09-04 | Android 14 适配 |
截图
应用截图

文件列表示例

数据源类型
| 类型 | 前缀 | 示例 |
|---|---|---|
| URL | http/https | https://ullisroboterseite.de/test.mp3 |
| 资源文件 | // 或无 | //test.mp3 或 test.mp3 |
| 相对路径 | / | /data/user/0/edu.mit.appinventor.aicompanion3/test.mp3 |
| 绝对路径 | file:/// | file:///Android/data/edu.mit.appinventor.aicompanion3/test.mp3 |
参考
属性 Properties
- 专辑 Album
- 获取或设置媒体文件的专辑名称。
- 专辑图像文件 AlbumImageFile
- 从指定文件读取专辑图像。
- 专辑图像高度DIP AlbumImageHeightDip
- 返回专辑图像的高度(DIP 单位)。
- 专辑图像高度像素 AlbumImageHeightRaw
- 返回专辑图像的高度(像素单位)。
- 专辑图像宽度DIP AlbumImageWidthDip
- 返回专辑图像的宽度(DIP 单位)。
- 专辑图像宽度像素 AlbumImageWidthRaw
- 返回专辑图像的宽度(像素单位)。
- 艺术家 Artist
- 获取或设置媒体文件的演唱者/表演者信息。
- 作者 Author
- 获取或设置媒体文件的作者信息。
- 时长 Duration
- 获取或设置媒体文件的时长(毫秒)。
- 格式化时长长格式 DurationFormattedLong
- 返回格式为 H:MM:SS 的时长文本。
- 格式化时长短格式 DurationFormattedShort
- 返回格式为 M:SS 的时长文本。
- 时长秒数 DurationSeconds
- 获取或设置媒体文件的时长(秒)。
- 流派 Genre
- 获取或设置媒体文件的音乐流派。
- 有专辑图像 HasAlbumImage
- 返回是否存在有效的专辑图像。
- MIME类型 MimeType
- 获取或设置媒体文件的 MIME 类型。
- 超时时间 Timeout
- 网络加载等待时间(秒)。默认值:3秒。
- 标题 Title
- 获取或设置媒体文件的标题。
- 编写者 Writer
- 获取或设置媒体文件的编写者信息。
- 年份 Year
- 获取或设置媒体文件的创建年份。
方法 Methods
- 加载元数据 LoadMetaData(源)
- 同步加载媒体文件的元数据。此方法会阻塞应用直到完成。
- 返回值:布尔值,true 表示成功,false 表示失败
- 异步加载元数据 LoadMetaDataAsync(源)
- 异步加载媒体文件的元数据。不会阻塞应用,完成后通过 AfterLoadMetaData 事件返回结果。
- 获取应用数据目录 GetAppDataDir(前缀)
- 获取应用私有目录的路径。
- 返回值:目录路径字符串
- 获取下载目录 GetDownloadDir(前缀)
- 获取下载目录的路径。
- 返回值:目录路径字符串
- 获取存储卷列表 GetVolumes(前缀)
- 获取设备的存储卷列表。
- 返回值:存储卷路径列表
- 获取文件列表 GetFileList(目录)
- 获取指定目录中的文件列表。
- 返回值:文件列表
- 删除文件 RemoveFile(路径)
- 删除指定路径的文件。
- 从应用目录删除文件 RemoveFileFromAppDir(文件名)
- 删除应用目录中的指定文件。
- 调整专辑图像大小DIP ResizeAlbumImageDip(新宽度, 新高度)
- 调整专辑图像的大小(DIP 单位)。
- 调整专辑图像大小像素 ResizeAlbumImageRaw(新宽度, 新高度)
- 调整专辑图像的大小(像素单位)。
- 保存专辑图像 SaveAlbumImage(路径, 格式)
- 保存专辑图像到指定路径。
- 格式:0 = PNG,1 = JPEG
- 保存专辑图像到应用目录 SaveAlbumImageToAppDir(文件名, 格式)
- 保存专辑图像到应用目录。
- 格式:0 = PNG,1 = JPEG
- 显示到图像组件 ToImageBlock(图像组件)
- 在 Image 组件中显示专辑图像。
事件 Events
- 元数据加载后 AfterLoadMetaData(成功)
- 当 LoadMetaDataAsync 完成后触发此事件。
Success:布尔值,true 表示加载成功,false 表示失败
错误代码
| 代码 | 错误信息 | 原因 |
|---|---|---|
| 17510 | Album image not found | 无法加载指定的专辑图像 |
| 17511 | Invalid size | 宽度或高度小于等于 0 |
| 17512 | IO error | 文件写入/删除失败 |
| 17513 | Invalid format | 格式参数不是 0 或 1 |
| 17514 | Invalid component type | 传入的组件不是 Image 类型 |
注意事项
-
无效文件处理:如果提供无效的文件路径、文件不存在或不是媒体文件,MediaMetadataRetriever 可能需要约 30 秒才能识别并报告错误
- 同步 vs 异步加载:
LoadMetaData:同步方法,会阻塞应用直到完成LoadMetaDataAsync:异步方法,不会阻塞应用,通过 AfterLoadMetaData 事件返回结果
-
专辑图像加载:通过 URL 加载专辑图像时是同步进行的,对于大文件或慢速连接可能需要较长时间
-
元数据完整性:并非所有元数据在所有媒体文件中都存在,某些字段可能为空
- 测试媒体文件:可使用
https://ullisroboterseite.de/test.mp3进行测试
使用示例
基本用法
当 Screen1.Initialize 时
调用 MediaHelper1.LoadMetaDataAsync
源 = "https://example.com/music.mp3"
当 MediaHelper1.AfterLoadMetaData 时
如果 获取 成功 那么
设置 Label1.Text 为 MediaHelper1.Title
设置 Label2.Text 为 MediaHelper1.Artist
设置 Label3.Text 为 MediaHelper1.DurationFormattedShort
如果 MediaHelper1.HasAlbumImage 那么
调用 MediaHelper1.ToImageBlock
图像组件 = Image1
保存专辑封面
当 Button1.Click 时
如果 MediaHelper1.HasAlbumImage 那么
调用 MediaHelper1.SaveAlbumImageToAppDir
文件名 = "album_cover.png"
格式 = 0
原文链接
原版文档:Ullis Roboter Seite - AI2 MediaHelper
作者:Urs (Ullis Roboter Seite)
扫码添加客服咨询