Audiomanager演讲者无法工作

时间:2017-04-04 16:03:55

标签: android performance android-audiomanager android-phone-call

我正在尝试在通话时启用扬声器:

final AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
audioManager.setSpeakerphoneOn(true);

我试图在setSpeakerphoneOn()听力管理员之后检查,并通过询问isSpeakerphoneOn()

来确定发言人仍未开启
audioManager.isSpeakerphoneOn();

在我的日志中,我可以看到一些我无法理解的错误:

E/AudioManager: Don't setBluetoothScoOn-PackageName: com.myapp.app  on = false
E/AudioManager: Don't setSpeakerphoneOn-PackageName: com.myapp.app  on = true

我在论坛中找不到任何关于此错误的信息。

无法在设备上运行:中兴通讯Z981,华为p9,我已尝试thisandroid.permission.MODIFY_AUDIO_SETTINGS已获批准。

4 个答案:

答案 0 :(得分:4)

嗨,阅读android开发者文章

https://developer.android.com/reference/android/media/AudioManager.html

清楚地解释

您需要在清单

中设置权限:MODIFY_AUDIO_SETTINGS

在清单

中添加此行
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

答案 1 :(得分:1)

我发现setMode()之前setSpeakerphoneOn()(当前模式)修复了logcat上的错误:

AudioManager audioManager = (AudioManager)getApplicationContext().getSystemService(Context.AUDIO_SERVICE); 
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(true);

答案 2 :(得分:0)

1. setSpeakerphoneOn()仅适用于setMode(AudioManager.MDOE_IN_CALL);

答案 3 :(得分:0)

唯一对我有用的是设置

audioManager.setMode(AudioManager.MODE_RINGTONE | AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(true);

如果没有 AudioManager.MODE_RINGTONE,它就不起作用..

感谢this post