Android AudioManager.setSpeakerphoneOn 休眠后停止工作

Android AudioManager.setSpeakerphoneOn stops working after sleep

所以我正在尝试使用在 Stack Overflow 上找到的一些代码,以便将音频从耳机路由到扬声器。

我目前正在做的是:

AudioManager am = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
am.setMode(AudioManager.STREAM_MUSIC);
am.setSpeakerphoneOn(true);
sleep(15000);

发生的情况是音频在 "sleep" 期间被路由,但它在 15 秒后返回到耳机。 如果我在没有睡眠的情况下执行此操作,声音将很快进入扬声器并返回耳机。

在这个调用之后,我的程序死了。我希望这会在系统中持续存在,就像应用程序 Headset Toggle 所做的那样

我无法发现为什么我的方法不起作用,但我找到了解决方法。

我现在正在做的是:

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, 1, 1);

感谢来自 this post 的 Michael。