如何在Android L中以编程方式打开来电扬声器?
我想在Android 5.0中使用我手机的接听电话GUI(phone's GUI)来接听来电。我找到了一种方法,需要制作一个活动,用于发送一些操作以打开手机的GUI。我成功地打开了手机的GUI以接听来电。问题是如何打开手机GUI的扬声器。我尝试了这个代码,但它没有打开。你能帮我用Android L解决这个问题吗如何在Android L中以编程方式打开来电扬声器?,android,android-intent,android-audiomanager,Android,Android Intent,Android Audiomanager,我想在Android 5.0中使用我手机的接听电话GUI(phone's GUI)来接听来电。我找到了一种方法,需要制作一个活动,用于发送一些操作以打开手机的GUI。我成功地打开了手机的GUI以接听来电。问题是如何打开手机GUI的扬声器。我尝试了这个代码,但它没有打开。你能帮我用Android L解决这个问题吗 audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); audioManager.setMode(A
audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_IN_CALL);
if (!audioManager.isSpeakerphoneOn())
audioManager.setSpeakerphoneOn(true);
audioManager.setMode(AudioManager.MODE_NORMAL);
显示
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
最后,我找到了解决办法。我把上面的代码放在一个线程中运行。它工作得很好。这是我的密码。希望它能帮助别人
Thread thread = new Thread() {
@Override
public void run() {
try {
while(true) {
sleep(1000);
audioManager.setMode(AudioManager.MODE_IN_CALL);
if (!audioManager.isSpeakerphoneOn())
audioManager.setSpeakerphoneOn(true);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread.start();
我遇到了这个解决方案。希望对你有帮助
final static int FOR_MEDIA = 1;
final static int FORCE_NONE = 0;
final static int FORCE_SPEAKER = 1;
Class audioSystemClass = Class.forName("android.media.AudioSystem");
Method setForceUse = audioSystemClass.getMethod("setForceUse", int.class, int.class);
setForceUse.invoke(null, FOR_MEDIA, FORCE_SPEAKER);
我以前尝试过该链接,但它不适用于我的手机如果您使用的是API级别>=23,请检查运行时权限,如果可能,请检查logcat您可能会收到任何类型的错误或警告,然后将其放入here@Vickyexpert:对不起,我迟了答复。我试图显示日志或警告,但它没有警告。我使用的是Android level 21。我无法打开接听电话,我不确定,如果可以使用SDK完成,但是你可以用Xposed moduleHi@jame来实现这一点,我正在尝试完成类似的事情,我有几部手机没有振铃器工作,我正在尝试开发一个应用程序,当我接到电话时,可以使用扩音器,当我把它靠近我的手机时,可以通过显示器的传感器转动和扬声器切换到耳机。有什么解决办法吗?为什么需要线程?为什么不在UI线程上运行呢?为我工作…它在android 10中为你工作吗?对我来说,它不起作用。请给出建议。这是胡说八道。。。我们为什么要这样做。该死的???我在想,有什么方法可以切换手机应用程序上的扬声器模式开关之类的!至少能起作用,哈哈。非常感谢。编辑:实际上不需要while循环。只要把它放在一根线里就行了。也许它只是不能在主线程上运行或者其他什么。有趣。终于工作了。。。
final static int FOR_MEDIA = 1;
final static int FORCE_NONE = 0;
final static int FORCE_SPEAKER = 1;
Class audioSystemClass = Class.forName("android.media.AudioSystem");
Method setForceUse = audioSystemClass.getMethod("setForceUse", int.class, int.class);
setForceUse.invoke(null, FOR_MEDIA, FORCE_SPEAKER);