Android 11系统下Titanium.Media.AudioPlayer的stop()方法无法停止播放问题
问题根因
你遇到的是Titanium SDK 10.1.0.GA对Android 11的音频接口适配缺陷,AudioPlayer的上层状态和系统底层MediaPlayer状态不同步,导致上层读取的playing状态为false、调用stop()无法触发底层播放停止,该问题仅在Android 11及以上系统触发,低版本系统不受影响。
解决方案
- 优先升级Titanium SDK到10.2.0.GA及以上稳定版本,该版本已官方修复Android 11下AudioPlayer的状态同步问题,升级后原有stop()逻辑可直接正常运行。
- 若暂时无法升级SDK,可使用以下兼容代码替换原有stop()调用逻辑:
if (OS_ANDROID && parseInt(Ti.Platform.version) >= 11) { // 强制同步底层状态 Alloy.Globals.player.pause(); Alloy.Globals.player.stop(); // 释放底层播放实例清除状态残留 Alloy.Globals.player.release(); // 若后续需要继续使用播放器,重新初始化实例即可 Alloy.Globals.player = Ti.Media.createAudioPlayer({ url: audioPath, allowBackground: true, audioFocus: true, audioType: Ti.Media.Sound.AUDIO_TYPE_MEDIA }); } else { // 原有低版本兼容逻辑 Alloy.Globals.player.stop(); }
- 补充Android 11专属权限与服务配置,在tiapp.xml的Android配置段添加如下内容:
<android xmlns:android="http://schemas.android.com/apk/res/android"> <manifest> <!-- Android 11 媒体播放前台服务权限 --> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" /> <application> <service android:name="ti.modules.titanium.media.AudioPlayerService" android:foregroundServiceType="mediaPlayback" /> </application> </manifest> </android>
- 优化实例生命周期管理:避免将AudioPlayer实例长期挂载在全局变量中,每次音频播放完成后主动调用
release()释放实例,下次播放前重新初始化,避免状态长期残留导致的同步异常。
内容的提问来源于stack exchange,提问作者PaulG
相关产品推荐
相关产品推荐

