如标题所述AudioManager.isMicrophoneMute()
无论如何总是返回 false。
设置:
list 包含此权限,因为可能与此相关的旧错误。旧错误是关于检查是否使用耳机。没有帮助,但也没有伤害。
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
- 从 telnet 发起对模拟器的调用。
- 拿起电话
- 检查应用程序 - 状态
audioManager.getMode() == audioManager.MODE_IN_CALL
是true
.好的,我们很好 - 状态检查
audioManager.isMicrophoneMute()
是false
- 好的,我们仍然很好 - 切换回手机并按下静音按钮
- 切换到应用程序,检查
audioManager.isMicrophoneMute()
而且它仍然false
- 不好。应该是真的。
那么这是一个损坏的 API 吗?或者我需要一些其他权限吗?或者这在模拟器上不起作用??
谢谢。
最佳答案
我做了一个小调查并检查了 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
(我检查了源代码) .因此,在这种情况下,状态是电话,这是 GSMPhone 类的一个实例。此类与 RIL 套接字通信并向那里发送适当的请求以设置静音 (RIL_REQUEST_SET_MUTE
)。因此,在命令路径上的任何地方都不会更新 AudioManager 的状态。同样,我没有看到 AudioManager 在更改麦克风状态时通知 RIL。
因此,如果您向 AudioManager 询问麦克风的状态,它会返回默认值(即 false)。我不知道这种行为是否是预期的,或者这是一个错误。您可以在 android-platform 组中提问,并链接到这个问题和错误。
关于android sdk 错误 - AudioManager.isMicrophoneMute() 始终为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14642916/