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

标签 android audio mute

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

设置:

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

<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. 切换到应用程序,检查 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/

相关文章:

Java 数据库连接类一直将连接返回为 Null

.net - 在浏览器控件.Net中禁用Flash音频

javascript - 静音我页面的任何声音。如何?

actionscript-3 - Actionscript 3,多音轨

java - Sms ContentObserver onChange() 触发多次

Android 仅对列出了电子邮件的联系人获取光标 >android 2.0

android - 如何在 Flutter 中设置间隔?

javascript - 在 HTML 页面中显示音频数据

ios - 返回第一个 ViewController 时如何阻止 AVFoundation 音频重新启动?

java - 加载 MIDI 文件时出现 EOF 异常