Vad*_*dim 4 audio android mute
正如标题所述AudioManager.isMicrophoneMute(),无论如何总是返回 false。
设置:
由于可能与此相关的较旧错误,清单包含此权限。旧错误是关于检查是否使用耳机。没有帮助,但也没有伤害。
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
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();
}
Run Code Online (Sandbox Code Playgroud)
您可以看到,如果您单击静音按钮,电话应用程序会检查R.bool.send_mic_mute_to_AudioManager安装到的参数false(我检查了来源)。因此,在这种情况下,状态是电话,它是 GSMPhone 类的一个实例。此类与 RIL 套接字通信并向 setMute ( RIL_REQUEST_SET_MUTE)发送适当的请求。因此,在命令路径上没有任何地方更新 AudioManager 的状态。同样,我没有看到 AudioManager 在更改麦克风状态时通知 RIL。
因此,如果您向 AudioManager 询问麦克风的状态,它会返回默认值(这是 false)。我不知道这种行为是预期的还是错误的。您可以在 android-platform 组中提问并制作指向此问题和错误的链接。