需求乍一眼看起來感覺很簡單,但是上手一查閱資料才知道,uniapp關于這些涉及底層類功能的呼叫知識真的是太少了!
一、uni.createInnerAudioContext()
一開始使用播放音頻的方法是uni.createInnerAudioContext(),掛載到全域后指定src,在需要播放的時候呼叫,
但是,該方法并不支持跟隨系統鈴聲模式,盡管官網API介紹有是否遵循系統靜音開關,但是并沒有什么卵用,
this.audioContext = uni.createInnerAudioContext();
this.audioContext.src = '/static/voice.mp3';
// obeyMuteSwitch默認值為true
// 在需要播放的地方,呼叫即可
this.audioContext.play();
二、plus.audio.createPlayer()
既然官方的API沒有作用,那就只能使用plus了,這里使用到setSessionCategory方法,
同時,Android端還需要引入AudioManager類,用于判斷當前系統的鈴聲模式,
iOS端具體可參考AVAudioSession.Category,
this.audioContext = plus.audio.createPlayer({
src: '/static/voice.mp3'
});
/**
* ambient模式在iOS端默認帶有跟隨系統鈴聲模式的行為,iOS端默認值為soloAmbient
* iOS端默認情況下為soloAmbient,但偶現有打開playback,即出現了之前靜音模式下也播放鈴聲的問題
* ambient支持多音頻混合,故不會打斷正在播放的音樂
*/
this.audioContext.setSessionCategory('ambient');
// 判斷平臺如果是Android
if (this.platform == 'android') {
// 匯入聲音管理類(AudioManager提供對音量和鈴聲模式控制的訪問)
let AudioManager = plus.android.importClass('android.media.AudioManager');
this.audioManager = new AudioManager();
}
// 播放的時候,iOS端可直接播放,因為ambient模式自帶有跟隨系統鈴聲模式的默認行為
// 但Android端需要判斷系統的鈴聲模式來決定是否需要播放
if (this.platform == 'android') {
/**
* 獲取當前手機的鈴聲模式
* 0. 林格模式,將沉默,不會振動, (這會覆寫振動設定,)
* 1. 林肯模式,將沉默,并會振動, (這會導致電話鈴聲總是振動,但是如果設定,通知振動只會振動,)
* 2. 鈴聲模式可能會發出聲音并可能振動, 如果在更換此模式之前的音量可以聽到,則會發出聲音, 如果振動設定打開,它會振動,
*/
let status = this.audioManager.getRingerMode();
if (status === 2) {
// 鈴聲模式下才播放音頻
this.audioContext.play();
}
return;
}
this.audioContext.play(); // iOS端直接播放
繼續加油,Keep learning…
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/296630.html
標籤:其他
上一篇:Android程式員入職前復習攻略(附:高級開發面試題)
下一篇:uniapp實作語音播放功能
