正如标题所述AudioManager.isMicrophoneMute()
总是返回false,无论如何。
设置:
Manifest包含此权限,因为可能与此相关的旧bug。老bug是关于检查是否使用耳机。没有帮助,但也没有伤害。
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
audioManager.getMode() == audioManager.MODE_IN_CALL
是true
。好的,我们很好audioManager.isMicrophoneMute()
是false
- 好的,我们仍然很好这是一个破碎的API吗?或者我还需要其他一些权限吗?或者这不适用于仿真器?
谢谢。
我做了一个小研究,检查了Android的来源。实际上,问题出在文件audioManager.isMicrophoneMute()
中的默认Phone应用程序中。这是功能:
false
您可以看到,如果单击“静音”按钮,“电话应用程序”将检查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();
}
(我在源中检查过)。因此,在这种情况下,状态是电话,这是GSMPhone类的一个实例。此类与RIL套接字通信,并向setMute(R.bool.send_mic_mute_to_AudioManager
)发送适当的请求。因此,在命令的路径上没有任何地方更新AudioManager的状态。同样,我没有看到AudioManager在更改麦克风状态时通知RIL。
因此,如果您向AudioManager询问有关麦克风状态的信息,则会返回默认值(即false)。我不知道这种行为是否是预期的,或者这是一个错误。你可以在android-platform组中提问,并链接到这个问题和bug。
这现在可以在5.x Lollipop中使用。仍然无法在4.x中工作。也许Google不会为旧操作系统修复它。