最近遇到一个需求要让所有声音都从听筒播放,查看了Android 的media包后,发现强制转换音频输出方式的方法被隐藏了,只要通过发射去调用Android Native的方法就可以了,下面是代码
try {
Class<?> audioSystemClass = Class.forName("android.media.AudioSystem");
Method setForceUse = audioSystemClass.getMethod("setForceUse", int.class, int.class);
// First 1 == FOR_MEDIA, second 1 == FORCE_SPEAKER. To go back to the default
// behavior, use FORCE_NONE (0).
setForceUse.invoke(null, audioSystemClass.getField("FOR_COMMUNICATION"), audioSystemClass.getField("FORCE_NONE"));
} catch (Exception e) {
Log.e("yes", "setDeviceConnectionState failed: " + e);
}
try {
if(audioManager != null) {
if(audioManager.isSpeakerphoneOn()) {
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(false);
audioManager.setS