Android公式開発ドキュメントTrainingシリーズ中国語版:オーディオ再生のオーディオ出力ハードウェアを管理する処理


原文住所:http://android.xsoftlab.net/training/managing-audio/audio-output.html
ユーザーがAndroidデバイスを使用してオーディオを楽しむ場合、代替案は複数あります.ほとんどのデバイスにはオーディオシステムが内蔵されています.スピーカとケーブルイヤホンのイヤホンジャック、Bluetooth接続、A 2 DPオーディオのサポートもたくさんあります.
使用するハードウェアのタイプを確認
APPの動作は、オーディオ出力のハードウェアタイプによって異なります.
AudioManagerを使用して、現在ルーティングされているデバイススピーカ、ケーブルイヤホン、または付属のBluetoothデバイスを問い合わせることができます.次のコードに示すように、
if (isBluetoothA2dpOn()) {
    // Adjust output for Bluetooth.
} else if (isSpeakerphoneOn()) {
    // Adjust output for Speakerphone.
} else if (isWiredHeadsetOn()) {
    // Adjust output for headsets
} else { 
    // If audio plays and noone can hear it, is it still playing?
}

オーディオハードウェア出力の変動の処理
ヘッドホンがデバイスから取り外された場合、またはBluetoothデバイスが接続解除された場合、オーディオストリームは自動的に内蔵スピーカデバイスに再接続されます.大きな音量で音楽を聴くと、騒がしい体験ができます.
幸いなことに、Androidシステムはイベントが発生するとACTIONを放送します.AUDIO_BECOMING_NOISY意図.ベストプラクティスは、オーディオを再生するときに、この意図に対してBroadcastReceiverを登録して傍受することです.音楽プレーヤーの例では、ユーザは通常、音楽の再生を一時停止することを望んでいる.しかし、ゲームを行う場合は、音量を大幅に下げることができます.
private class NoisyAudioStreamReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent.getAction())) {
            // Pause the playback
        }
    }
}
private IntentFilter intentFilter = new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY);
private void startPlayback() {
    registerReceiver(myNoisyAudioStreamReceiver(), intentFilter);
}
private void stopPlayback() {
    unregisterReceiver(myNoisyAudioStreamReceiver);
}