android sdk错误 - AudioManager.isMicrophoneMute()始终为false

问题描述 投票:3回答:2

正如标题所述AudioManager.isMicrophoneMute()总是返回false,无论如何。

设置:

Manifest包含此权限,因为可能与此相关的旧bug。老bug是关于检查是否使用耳机。没有帮助,但也没有伤害。

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

  1. 从telnet启动对模拟器的调用。
  2. 拿起电话
  3. 检查应用程序 - 状态audioManager.getMode() == audioManager.MODE_IN_CALLtrue。好的,我们很好
  4. 状态检查audioManager.isMicrophoneMute()false - 好的,我们仍然很好
  5. 切换回手机并按静音按钮
  6. 切换到应用程序,检查qazxsw poi,它仍然是qazxsw poi - 没有好处。应该是真的。

这是一个破碎的API吗?或者我还需要其他一些权限吗?或者这不适用于仿真器?

谢谢。

android audio mute
2个回答
4
投票

我做了一个小研究,检查了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。


0
投票

这现在可以在5.x Lollipop中使用。仍然无法在4.x中工作。也许Google不会为旧操作系统修复它。

© www.soinside.com 2019 - 2024. All rights reserved.