今日は Managing Audio Focus
です。
複数の音楽再生アプリがある場合
Androidはオーディオフォーカスを持ったアプリだけが
音楽を再生するように調整します。
今回はオーディオフォーカスの管理のお話。
逆に言えば音楽再生するには必ずオーディオフォーカスを取得
しなければ再生できません。
まず、取得の仕方から
AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE);
...
requestAudioFocus( でオーディオフォーカスを取得した場合は
AUDIOFOCUS_REQUEST_GRANTED を返します
int result = am.requestAudioFocus(afChangeListener,
AudioManager.STREAM_MUSIC,
永続的なフォーカスの取得を要求
AudioManager.AUDIOFOCUS_GAIN);
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);
}
再生が終わった場合
他の再生アプリの為にも確実に↓を呼び出してフォーカスを放します。
am.abandonAudioFocus(afChangeListener);
次にフォーカスが切り替わる処理です。
フォーカスか切り替わったとき onAudioFocusChange(
コールバックメソッドが受信します。
フォーカスを一時的か永続的に失っているのかで処理を分けます。
OnAudioFocusChangeListener afChangeListener =
new OnAudioFocusChangeListener() {
public void onAudioFocusChange(int focusChange) {
一時的にフォーカスが外れた場合
if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT
フォーカスを取り戻した場合
} else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
永続的にフォーカスを失った場合
} else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
再生終了処理
am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);
am.abandonAudioFocus(afChangeListener);
}
}
};
最後に、オーディオフォーカスの取得のおいて
ダック というオプションがあります。
これは、一時的にフォーカスを失ったとき今再生中の音楽を
止めることなく音量を下げて再生し続けるプロセスです。
まず登録時に設定します。
int result = am.requestAudioFocus(afChangeListener,
AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);
フォーカス切替の処理は
OnAudioFocusChangeListener afChangeListener =
new OnAudioFocusChangeListener() {
public void onAudioFocusChange(int focusChange) {
ダック可能な一時停止
if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK
ボリュームを下げる処理
} else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
}
}
};
こんな風になります。
本日は以上です。