オーディオプログラムの開発メモ
ANDROIDで音を扱う場合、他のプログラムとのスピーカーの共有に気をつけなければいけません。
オーディオリスナーを登録しておけば監視ができます。
afChangeListener = new OnAudioFocusChangeListener() {
public void onAudioFocusChange(int focusChange) {
if (focusChange != AudioManager.AUDIOFOCUS_GAIN) {//フォーカスを奪われた
Toast.makeText(getApplicationContext(), "AUDIOFOCUS_LOSS", Toast.LENGTH_SHORT).show();
}else{//フォーカスが戻った
Toast.makeText(getApplicationContext(), "AUDIOFOCUS_GAIN", Toast.LENGTH_LONG).show();
}
}
};
audio.requestAudioFocus(afChangeListener, AudioManager.STREAM_VOICE_CALL, AudioManager.AUDIOFOCUS_GAIN);
注意点としては受話スピーカーなど出力先を決めている場合に出力先が変えられてしまう事が有ります。
・スピーカーの権限を奪う
AudioManager.AUDIOFOCUS_GAIN
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT
・スピーカーの権限を奪わない
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
ANDROIDのバージョンによって出力先の権利が先取りか後取り異なる場合があります。
2.X系は先取り優先
4.X系は後取り優先
問題なのは受話スピーカーと背面スピーカーの音量差です。
受話スピーカーから背面スピーカーに切り替わると、音量が約三倍になります。
0 件のコメント:
コメントを投稿