用户有多种途径来听android设备的音频文件。每个android设备都有一个内置的扬声器和一个头戴式耳机插口。而且许多都支持蓝牙连接,支持A2DP音频播放。
检测使用的硬件类型
从哪个硬件输出音频直接影响着你的APP播放音频的具体行为。你可以使用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?
}
处理输出硬件改变的情况
当一个耳机被拔出,或者蓝牙设备断开,那么音频播放自动的被发送到内置的扬声器。如果播放音乐的时候把声音开到最大,那这个时候切换到扬声器的时候就是很大的声音,如噪音一般。
幸运的是,android系统在发现耳机或者蓝牙设备断开的时候,会发送一个广播:ACTION_AUDIO_BECOMING_NOISY
的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);
}