Android が SMS を受信すると、通知によって AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK フォーカス変更が送信されます。メディア プレーヤーの音量を 50% 下げることでこれを処理します。
例えば
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
// E.g. SMS
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK :
playerDuck(true);
break;
case AudioManager.AUDIOFOCUS_GAIN :
case AudioManager.AUDIOFOCUS_GAIN_TRANSIENT :
playerDuck(false);
playerResume();
break;
}
}
public synchronized void playerDuck(boolean duck) {
if (mediaPlayer != null) {
// Reduce the volume by half when ducking - otherwise play at full volume.
mediaPlayer.setVolume(duck ? 0.5f : 1.0f, duck ? 0.5f : 1.0f);
}
}
これは、デバイスのスピーカーを介してメディアプレーヤーを聞いている場合は正常に機能しますが、ヘッドフォンを接続すると、一時的に音量を下げる代わりに、通知の再生中にメディアプレーヤーがミュートされます。
ヘッドフォンが接続されているとき、オーディオ フォーカスの変化を別の方法で処理するにはどうすればよいですか?