苏州市建设交易中心网站首页,中国建设人才信息网查,上海网站建设咨询,惠州市+网站开发公司原文地址#xff1a;http://android.xsoftlab.net/training/managing-audio/audio-output.html
当用户使用Android设备享受音频时#xff0c;它有多重的可选择替代方案。大多数的设备内置了一套音频系统#xff1a;扬声器以及有线耳机的耳机插孔#xff0c;也有很多功能蓝…原文地址http://android.xsoftlab.net/training/managing-audio/audio-output.html
当用户使用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意图。最佳的实践方式就是在播放音频的时候对这个意图注册一个BroadcastReceiver来监听它。在音乐播放器的例子中用户通常会希望暂停音乐的播放。然而如果在进行游戏那么你可以选择大幅度的降低音量。
private class NoisyAudioStreamReceiver extends BroadcastReceiver {Overridepublic 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);
}