实际上调用声音可以通过android.media.AudioSystem这个类调用setForceUse( int, int )这个方法就可以实现听筒的切换。但是Android把这个类在jar包中隐藏了,我们看不到,也找不到。为此,我们必须要通过反射调获得这个方法。
private void setSpeakerphoneOn(boolean on) {
try {
//播放音频流类型
setVolumeControlStream(AudioManager.STREAM_VOICE_CALL);
//获得当前类
Class audioSystemClass = Class.forName("android.media.AudioSystem");
//得到这个方法
Method setForceUse = audioSystemClass.getMethod("setForceUse", int.class, int.class);
if (on) {
audioManager.setMicrophoneMute(false);
audioManager.setSpeakerphoneOn(true);
audioManager.setMode(AudioManager.MODE_NORMAL);
// setForceUse.invoke(null, 1, 1);
} else {
audioManager.setSpeakerphoneOn(false);
audioManager.setMode(AudioManager.MODE_NORMAL);
setForceUse.invoke(null, 0, 0);
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
}
} catch (Exception e) {
e.printStackTrace();
}
}