constructor() {
super();
// 监听页面可见性变化
document.addEventListener('visibilitychange', ()=> {
if (!document.hidden) {
console.log('[App] Returned to foreground');
setTimeout(()=>{
this.initAudioContext();
}, 1000);
}
});
// 同时监听 iOS 特定的 resume 事件(可选,增加兼容性)
window.addEventListener('resume', ()=> {
console.log('[App] App resume event fired');
setTimeout(()=>{
this.initAudioContext();
}, 1000);
});
}
initAudioContext(){
// 先获取 AudioContext
var audioCtx = null;
if (window.cc && window.cc.sys && window.cc.sys.__audioSupport && window.cc.sys.__audioSupport.context) {
audioCtx = window.cc.sys.__audioSupport.context;
// console.log('找到 AudioContext, 当前状态:', audioCtx.state);
} else {
// console.log('未找到 AudioContext,尝试其他路径...');
// 备用路径
if (window.cc && window.cc.audioEngine) {
for (var id in window.cc.audioEngine._id2audio) {
var audio = window.cc.audioEngine._id2audio[id];
if (audio._element && audio._element.context) {
audioCtx = audio._element.context;
// console.log('从 audioEngine 找到 AudioContext, 状态:', audioCtx.state);
break;
}
}
}
}
// 如果找到了 AudioContext,执行恢复
if (audioCtx) {
// console.log('准备恢复 AudioContext, 当前状态:', audioCtx.state);
audioCtx.suspend();
setTimeout(()=>{
audioCtx.resume().then(() => {
// console.log('✅ 恢复成功!新状态:', audioCtx.state);
// alert('音效已恢复');
AudioManager.getInstance().playEffectSync(AUDIO_RES_PATH.ui_close);
}).catch(e => {
// console.error('❌ 恢复失败:', e.name, e.message);
// alert('恢复失败: ' + e.message);
});
}, 500);
} else {
console.log('no find AudioContext');
}
} 试试我的是可以了 我的是ios h5 cocos2.4.9