【Android Developers Training】 46. 处理音频外放设备

注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好。

原文链接:http://developer.android.com/training/managing-audio/audio-focus.html


当用户希望从Android设备欣赏音频时,他将会有狠多选择。大多数设备有内置的喇叭,以及有线耳机的插孔,还有很多支持A2DP音频的蓝牙连接设备。


一). 检查哪个硬件在被使用

你的应用是如何表现的可能会被外放被引导至什么硬件设备所影响。

你可以通过查询AudioManager来确定现在的音频是被引导至扩音器,有线耳机还是蓝牙设备。如下所示:

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?

}

二). 处理音频外放设备的改变

当没有插入耳机,也没有蓝牙设备连接,音频流会自动的引导至扩音器。如果你听音乐时喜欢吧音量调的像我一样高,那么你可能会被吵闹声惊吓到。

幸运的是,当这种情况发生时,系统会广播一个ACTION_AUDIO_BECOMING_NOISY行为的intent。注册一个广播接收器(BroadcastReceiver)来监听这一intent是一个很好的习惯,不管你是否在播放音乐。对于音乐播放器来说,用户一般期望播放被停止,二对于游戏来说,你可能会选择显著降低音量。

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);

}

你可能感兴趣的:(developer)