這些天在項目上遇到了些困難:在播放語音的時候遇到了第三方音頻播放器的幹擾。
倒騰了兩天,終于解決了,這裡mark一下。
在Android系統中,如果想自己的音頻播放不被第三方幹擾,例如有時出現音樂和你的語音一起播放,或者是一聲音大,一聲音小。
這時候必須先擷取音頻的焦點(除了一些耍流氓的),然後才去播放你的語音,而且在播放結束後必須釋放焦點。
1.請求音頻焦點
public void requestAudioFocus() {
if (!mIsGetAudioFocus) {
int result = mAudioManager.requestAudioFocus(afChangeListener,
AudioManager.STREAM_MUSIC, // Use the music stream.
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
mIsGetAudioFocus = true;
} else {
Log.e(TAG, "AudioManager request Audio Focus result = " + result);
}
}
Log.v(TAG, "requestAudioFocus mAudioFocus = " + mIsGetAudioFocus);
// 根據需求,在使用者未選擇播放模式時,預設是聽筒
if (isDefaultMode) {
mAudioManager.setMode(AudioManager.MODE_IN_CALL);
CommonUI.showToast(mContext, mContext.getResources().getString( R.string.chat_voice_note_earphone));
}
}
2.播放語音,在請求完焦點之後
Voice.getInstance(mContext).requestAudioFocus();
mPlayer.start();
3.在你的語音播放結束之後,釋放焦點
mPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
Log.i(TAG, "Stop playback");
Voice.getInstance(mContext).abandonAudioFocus();
}
});