安卓原生定义了部分外部设备接入时是否静音,比如耳机、有线扬声器、HDMIOUT设备等,这些设备接入时,安卓会设置AudioSystem.STREAM_MUSIC为非静音状态
从代码里可以看出,当一个newDevice 接入时,会携带一个deviceID,然后根据设备ID判断这个 设备是否包含在解除静音的设备集合里
这里的几个设备分别对应
AudioSystem.DEVICE_OUT_WIRED_HEADSET | 有线耳机 |
---|---|
AudioSystem.DEVICE_OUT_WIRED_HEADPHONE | 有线扬声器 |
AudioSystem.DEVICE_OUT_LINE | 有线线路输出 |
AudioSystem.DEVICE_OUT_ALL_A2DP_SET | A2DP蓝牙设备 |
AudioSystem.DEVICE_OUT_ALL_USB_SET | USB音频设备 |
AudioSystem.DEVICE_OUT_HDMI | AudioSystem.DEVICE_OUT_HDMI |
大家按照自己所需移除调对应的设备即可,比如我不想让HDMIOUT接入的时候解除静音,就这样改
java
private static final Set<Integer> DEVICE_MEDIA_UNMUTED_ON_PLUG_SET;
static {
DEVICE_MEDIA_UNMUTED_ON_PLUG_SET = new HashSet<>();
DEVICE_MEDIA_UNMUTED_ON_PLUG_SET.add(AudioSystem.DEVICE_OUT_WIRED_HEADSET);
DEVICE_MEDIA_UNMUTED_ON_PLUG_SET.add(AudioSystem.DEVICE_OUT_WIRED_HEADPHONE);
DEVICE_MEDIA_UNMUTED_ON_PLUG_SET.add(AudioSystem.DEVICE_OUT_LINE);
DEVICE_MEDIA_UNMUTED_ON_PLUG_SET.addAll(AudioSystem.DEVICE_OUT_ALL_A2DP_SET);
DEVICE_MEDIA_UNMUTED_ON_PLUG_SET.addAll(AudioSystem.DEVICE_OUT_ALL_BLE_SET);
DEVICE_MEDIA_UNMUTED_ON_PLUG_SET.addAll(AudioSystem.DEVICE_OUT_ALL_USB_SET);
//DEVICE_MEDIA_UNMUTED_ON_PLUG_SET.add(AudioSystem.DEVICE_OUT_HDMI);
}
或者我不想让ARC设备接入后保持静音状态,就判断一下设备类型设置一下:
java
private void onAccessoryPlugMediaUnmute(int newDevice) {
if (DEBUG_VOL) {
Log.i(TAG, String.format("onAccessoryPlugMediaUnmute newDevice=%d [%s]",
newDevice, AudioSystem.getOutputDeviceName(newDevice)));
}
if (AudioSystem.getOutputDeviceName(newDevice).contains("hdmi_arc")) {
Log.d(TAG, "lsl:onAccessoryPlugMediaUnmute: HDMI ARC device connected");
mStreamStates[AudioSystem.STREAM_MUSIC].mute(false, "onAccessoryPlugMediaUnmute");
}
就这样。