JoeDevPlayer 扩展:本地与流媒体音频播放器,前台服务、通知栏控制、播放列表与睡眠定时器

« 返回首页

JoeDevPlayer 扩展

功能完整的音频播放器扩展:本地音乐与流媒体播放、前台服务灭屏不停播、通知栏媒体控制、播放列表、循环 / 随机 / 倍速 / 变调、睡眠定时器、耳机线控,并能读取歌曲元数据(标题 / 艺术家 / 专辑 / 年份等)。

下载

joejsanz.joedevplayer.aix(v1.6 Hybrid)

PlayerHybridVersion.aia - 原作者示例项目

基本信息

  • 版本:v1.6(Hybrid)
  • 发布时间:2024-08-12(首发),v1.6 更新于 2025-11-11
  • JDK:11
  • 最低 API 级别:21
  • 构建方式:FAST-CLI v5.2.0-premium
  • 体积:aix 约 2.1MB(内含 Media3 ExoPlayer 混合引擎);示例项目 PlayerHybridVersion.aia 约 2.2MB

双引擎说明(Hybrid)

v1.6 起内置两套播放引擎,按源自动选择:

  • 流媒体(URL 含 hls / dash / streaming 等特征、以 rtmp:// / rtsp:// 开头、以 .m3u8 / .mpd 结尾)→ ExoPlayer(Media3),流播放带淡入效果
  • 本地文件与其余 URL → MediaPlayer

当前使用的引擎可通过 CurrentPlayer 属性查询(ExoPlayer / MediaPlayer / None)。

支持格式:MP3、WAV、AAC、MIDI(.mid / .midi)、OGG、AMR-NB(.amr)、AMR-WB(.awb,视设备而定)、FLAC、3GP、M4A。

截图

通知栏播放控制(v1.5 起)

通知栏播放控制

播放列表演示

播放列表演示

GetMusicFiles 方法

GetMusicFiles 方法

MusicFilesRetrieved 事件(12 个列表)

MusicFilesRetrieved 事件

SetPlaylist 事件

SetPlaylist 事件

方法

StartService启动前台服务()
启动前台播放服务(Foreground Service),播放期间显示通知,可避免灭屏或退到后台时被系统休眠机制中断播放。
StopService停止前台服务()
停止前台播放服务。
NotificationAlbumArt设置通知专辑封面(歌曲路径,无封面时使用的素材图片)
读取歌曲自带的封面显示在通知栏;若歌曲没有封面,则使用指定的素材图片。
  • 歌曲路径:设备上歌曲的文件路径
  • 无封面时使用的素材图片:素材(assets)中的图片文件名
NotificationContent设置通知内容(标题,内容)
设置通知的标题与内容。此块可选,默认标题为 Playing,默认内容为 Audio playback in progress。
Play播放()
播放当前媒体源。v1.6 起此块只负责播放,媒体源由 Source 属性设置。
Repeat设置循环模式(循环模式)
设置循环模式,参数用 RepeatMode 辅助块选择。
  • 循环模式:repeatAll(列表循环)/ repeatOne(单曲循环)/ repeatOff(关闭循环)
Shuffle随机播放()
切换到随机播放模式。
Loop段落循环(开始时间,结束时间)
在 start 与 end(毫秒)之间的歌曲片段循环播放;调用 DisableLoop 之前不会停止。
  • 开始时间:开始时间(毫秒)
  • 结束时间:结束时间(毫秒)
DisableLoop取消段落循环()
取消段落循环,歌曲继续正常播放。
Previous上一首()
切换到上一首歌曲(随机播放模式下不适用)。
Next下一首()
切换到下一首歌曲(随机播放模式下适用)。
Pause暂停()
暂停播放。
Stop停止()
停止播放。
Resume继续播放()
从暂停处继续播放。
Volume设置音量(左声道音量,右声道音量)
分别设置左右声道的音量,取值 0.0(静音)~ 1.0(最大),默认 0.5。
GetMusicFiles扫描设备音乐(音频类型)
按类型扫描设备上的音频文件,结果通过 MusicFilesRetrieved 事件返回。
  • 音频类型:用 AudioType 辅助块选择:MP3 / AAC / WAV / OGG / AMR / FLAC / MIDI / MP4 / M4A / MKA / All(全部)
GetPlaylist获取播放列表()
获取播放列表中的歌曲列表。
PlaybackSpeed设置播放速度(速度)
设置播放速度,推荐 0.5 ~ 2.0。
Pitch调整音调(音调)
调整 MediaPlayer 引擎的播放音调,1.0 为正常音调。
CurrentPosition获取当前进度()
获取当前播放位置(毫秒)。
ConvertToMilliseconds转换为毫秒(时间)
把分秒形式表示的时间转换为毫秒数。
ConvertToMinutesAndSeconds转换为分秒(毫秒)
把毫秒数转换为分秒格式。
SeekTo跳转进度(位置)
跳转到指定位置(毫秒)。
AlbumArt获取专辑封面(歌曲路径,无封面时使用的素材图片)
获取设备上歌曲的专辑封面并保存为文件;若歌曲没有封面则使用指定的素材图片。返回封面文件的路径。
SongsCount获取歌曲总数()
获取播放列表中的歌曲总数。
SleepTimer设置睡眠定时器(分钟)
设置睡眠定时器(单位:分钟)。
CancelSleepTimer取消睡眠定时器()
取消睡眠定时器。
IsSleepTimerActive睡眠定时器是否在计时()
检查睡眠定时器是否正在计时。
FastForward快进(毫秒)
从当前位置快进指定毫秒数。
Rewind快退(毫秒)
从当前位置回退指定毫秒数。

事件

SourceLoaded媒体源加载完成时()
媒体源加载完成时触发。
AudioFocusLost失去音频焦点时()
失去音频焦点时触发(如来电、其它应用抢占播放)。
SetPlaylist播放列表播完时()
播放列表中的歌曲全部播放完毕时触发。
MusicFilesRetrieved扫描完成时(文件路径,标题,艺术家,专辑,时长,音轨号,年份,流派,作曲家,文件大小,显示名,码率)
GetMusicFiles 扫描完成时触发,12 个列表同序对应每首歌:文件路径、标题、艺术家、专辑、时长、音轨号、年份、流派、作曲家、文件大小、显示名、码率。
MediaPlay通知栏点击播放时()
用户点击通知栏的播放按钮时触发。
MediaPause通知栏点击暂停时()
用户点击通知栏的暂停按钮时触发。
MediaStop通知栏点击停止时()
用户点击通知栏的停止按钮时触发。
MediaNext通知栏点击下一首时()
用户点击通知栏的下一首按钮时触发。
MediaPrevious通知栏点击上一首时()
用户点击通知栏的上一首按钮时触发。
PlaybackComplete播放完成时()
当前歌曲播放完成时触发。
SongIndexChanged歌曲索引变化时(新索引)
当前播放的歌曲索引变化时触发,返回新的索引。
SleepTimerTick睡眠定时器计时中(剩余秒数)
睡眠定时器计时期间触发,返回剩余秒数。
SleepTimerFinished睡眠定时器结束时()
睡眠定时器倒计时结束时触发。
SleepTimerCancelled睡眠定时器取消时()
睡眠定时器被取消时触发。
SeekPositionChanged播放位置跳转时(新位置)
播放位置发生跳转时触发,返回新位置(毫秒)。
HeadsetButtonPressed耳机按键按下时(按键动作)
用户按下耳机上的物理按键时触发,返回按键动作(Play / Pause / Play_Pause / Stop / Next / Previous / Fast_Forward / Rewind / Call_Button)。
HeadphonesConnected耳机插入时()
耳机插入设备时触发。
HeadphonesDisconnected耳机拔出时()
耳机从设备拔出时触发(播放会自动暂停)。

属性

Source媒体源
要播放的媒体源(URL 或文件路径)。只加载源,需调用 Play() 开始播放。v1.6 起可在设计器 / 积木中直接设置。
CurrentPlayer当前引擎
当前使用的播放引擎:ExoPlayer / MediaPlayer / None(只读)。
IsPlaying是否正在播放
检查当前是否正在播放(只读)。
SongTitle歌曲标题
当前歌曲的标题(只读)。
ArtistName艺术家
当前歌曲的艺术家(只读)。
AlbumName专辑名
当前歌曲的专辑名(只读)。
TrackNumber音轨号
当前歌曲在专辑中的音轨号(只读)。
Year年份
当前歌曲的发行年份(只读)。
Genre流派
当前歌曲的流派(只读)。
Composer作曲家
当前歌曲的作曲家(只读)。
Size文件大小
当前歌曲的文件大小(可读格式,如 3.5 MB,只读)。
Duration时长
当前歌曲的时长(毫秒,只读)。
AudioSessionId音频会话 ID
当前播放的音频会话 ID,可用于配置均衡器(Equalizer)等音频效果(只读)。
CurrentSongIndex当前歌曲索引
当前歌曲在播放列表中的索引;没有歌曲时返回 0(只读)。

版本更新

v1.2(2025-08-30)

  • 组件与方法改名、事件名去掉 On 前缀;删除 PlayFromAssets 等旧方法。
  • 新增元数据属性:TrackNumber、Year、Genre、Composer、Size。
  • aix 从 945KB 瘦身到 30.9KB。

v1.3(2025-10-23)

  • 修复灭屏后停止播放的问题(配合前台服务)。
  • 新增睡眠定时器:SleepTimer / CancelSleepTimer / IsSleepTimerActive 方法与 SleepTimerTick / SleepTimerFinished / SleepTimerCancelled 事件。

v1.4(2025-10-26)

  • 新增 FastForward / Rewind 快进快退方法。
  • 新增 SeekPositionChanged 事件与蓝牙耳机按键控制。

v1.5(2025-10-29)

  • 新增通知栏播放控制:NotificationContent / NotificationAlbumArt 方法与 MediaPlay / MediaPause / MediaStop / MediaNext / MediaPrevious 事件。
  • 耳机拔出时自动暂停播放。体积增至约 320KB。

v1.6 Hybrid(2025-11-11)

  • 引入 Media3 v1.9.0-alpha01 的 ExoPlayer 作为流媒体混合引擎,按源自动判定并切换引擎(流播放带淡入)。
  • Play 改为只负责播放,媒体源改由 Source 属性设置。体积增至约 2.1MB。

版权信息

本文档内容依据原作者发布页面整理翻译,版权归原作者所有。

  • 原作者:Joe J. Sánchez(Joejsanz)
  • 原始网址:https://community.appinventor.mit.edu/t/player-device-audio-loop-play-streaming/123673
  • 发布日期:2024年8月12日
文档反馈