Android開発記録雑記 -12ページ目

Android開発記録雑記

パソコン中級者ぐらいの私が
スマホアプリの開発をしてみようと思い立ち
Androidで動くアプリ開発過程をこれから書き記していきます。

今日は 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) {
        }
    }
};

こんな風になります。

本日は以上です。