android sdk错误-AudioManager.isMicrophoneMute()始终为false
正如标题所述,android sdk错误-AudioManager.isMicrophoneMute()始终为false,android,audio,mute,Android,Audio,Mute,正如标题所述,AudioManager.isMicrophoneMute()无论发生什么情况,总是返回false 设置: 清单包含此权限,因为可能与此相关的旧错误。老问题是检查是否使用了耳机。没有帮助,但也没有伤害 从telnet发起对模拟器的调用 接电话 检查app-statusaudioManager.getMode()==audioManager.MODE\u调用中的是否为true。好的,我们很好 状态检查audioManager.isMicrophoneMute()为false-好的,
AudioManager.isMicrophoneMute()
无论发生什么情况,总是返回false
设置:
清单包含此权限,因为可能与此相关的旧错误。老问题是检查是否使用了耳机。没有帮助,但也没有伤害
audioManager.getMode()==audioManager.MODE\u调用中的是否为true
。好的,我们很好
audioManager.isMicrophoneMute()
为false
-好的,我们仍然很好false
-不好。应该是真的谢谢。我做了一个小调查,检查了Android的来源。实际上,问题出在文件
packages/apps/Phone/src/com/android/Phone/PhoneUtils.java
中的默认电话应用程序中。以下是函数:
/**
* Internally used muting function.
*/
private static void setMuteInternal(Phone phone, boolean muted) {
final PhoneGlobals app = PhoneGlobals.getInstance();
Context context = phone.getContext();
boolean routeToAudioManager =
context.getResources().getBoolean(R.bool.send_mic_mute_to_AudioManager);
if (routeToAudioManager) {
AudioManager audioManager =
(AudioManager) phone.getContext().getSystemService(Context.AUDIO_SERVICE);
if (DBG) log("setMuteInternal: using setMicrophoneMute(" + muted + ")...");
audioManager.setMicrophoneMute(muted);
} else {
if (DBG) log("setMuteInternal: using phone.setMute(" + muted + ")...");
phone.setMute(muted);
}
app.notificationMgr.updateMuteNotification();
}
您可以看到,如果单击静音按钮,电话应用程序将检查参数R.bool.send_mic_Mute_to_AudioManager
,该参数安装在false
(我在源代码中进行了检查)。因此,在这种情况下,状态是tophone,这是GSMPhone类的一个实例。此类与RIL套接字通信,并将相应的请求发送到setMute(RIL\u request\u SET\u MUTE
)。因此,在命令路径上,AudioManager的状态不会更新。同样,我没有看到AudioManager在更改麦克风状态时通知RIL
因此,如果您向AudioManager询问麦克风的状态,它将返回默认值(为false)。我不知道这种行为是预期的还是一个bug。你可以在android平台组中提问,并链接到这个问题和bug 这现在在5.x棒棒糖中有效。在4.x中仍然不起作用。也许谷歌不会为旧的操作系统修复它 与android SDK交叉发布为bug。谢谢,那是些很巧妙的侦探工作。你知道我是否可以强行覆盖
R.bool。在配置文件中将\u mic\u mute\u发送到\u AudioManager
,或者将代码设置为true
?如果你想构建自己的Android映像并使用它,你只需将此值更改为false即可。如果你问我如何在一个真正的设备上改变这个,那么我不知道。谢谢。是的,不是想树立自己的形象。这将被用于一个应用程序中。奖励奖金,但不按回答进行标记,因为它指出了问题,但无法解决问题。感谢所有审阅我的问题的人和@Yury提供的攻击角度。