MediaHelper 媒体助手扩展:从媒体文件提取元数据和专辑封面

« 返回首页

MediaHelper 媒体助手扩展

介绍

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

示例应用图标

主要功能

  • 从本地和在线媒体文件提取元数据
  • 处理专辑封面图像(提取、调整大小、保存)
  • 文件管理操作(获取目录、删除文件等)
  • 支持同步和异步数据加载

下载

.aix拓展文件:

de.ullisroboterseite.ursai2mediahelper.aix

.aia示例文件:

MediaHelperTest.aia

版本历史

版本 日期 修改内容
1.0 2021-07-06 初始版本
1.1 2024-09-04 Android 14 适配

截图

应用截图

应用截图

文件列表示例

文件列表

数据源类型

类型 前缀 示例
URL http/https https://ullisroboterseite.de/test.mp3
资源文件 // 或无 //test.mp3test.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 类型

注意事项

  1. 无效文件处理:如果提供无效的文件路径、文件不存在或不是媒体文件,MediaMetadataRetriever 可能需要约 30 秒才能识别并报告错误

  2. 同步 vs 异步加载
    • LoadMetaData:同步方法,会阻塞应用直到完成
    • LoadMetaDataAsync:异步方法,不会阻塞应用,通过 AfterLoadMetaData 事件返回结果
  3. 专辑图像加载:通过 URL 加载专辑图像时是同步进行的,对于大文件或慢速连接可能需要较长时间

  4. 元数据完整性:并非所有元数据在所有媒体文件中都存在,某些字段可能为空

  5. 测试媒体文件:可使用 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)

文档反馈