【问题标题】:Audiomanager Speaker not workingAudiomanager 扬声器不工作
【发布时间】:2017-04-04 16:03:54
【问题描述】:

我正在尝试在通话时启用扬声器:

final AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
audioManager.setSpeakerphoneOn(true);

我尝试在音频管理器setSpeakerphoneOn() 之后进行检查,并通过询问isSpeakerphoneOn() 来确认扬声器仍未打开

audioManager.isSpeakerphoneOn();

在我的日志中,我可以看到一些我无法理解的错误:

E/AudioManager: Don't setBluetoothScoOn-PackageName: com.myapp.app  on = false
E/AudioManager: Don't setSpeakerphoneOn-PackageName: com.myapp.app  on = true

我在论坛中找不到有关此错误的任何信息。

不适用于设备:中兴Z981,华为p9,我已经尝试this,并且android.permission.MODIFY_AUDIO_SETTINGS被授予。

【问题讨论】:

    标签: android performance android-audiomanager android-phone-call


    【解决方案1】:

    你好阅读android开发者文章

    https://developer.android.com/reference/android/media/AudioManager.html

    解释清楚

    您需要在清单中设置权限:MODIFY_AUDIO_SETTINGS

    在清单中添加这一行

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

    【讨论】:

    • 需要权限:MODIFY_AUDIO_SETTINGS。
    • 我读过。我已经有了这个权限。它已经在除中兴通讯之外的所有设备上运行。
    • 此常量在 API 级别 5 中已弃用。请勿直接设置音频路由,请改用 setSpeakerphoneOn()、setBluetoothScoOn() 方法。
    • 可能是中兴的bug
    • 谢谢!试图将免提电话打开一段时间,这解决了问题。
    【解决方案2】:

    我发现setSpeakerphoneOn()之前的setMode()(当前模式)修复了logcat上的错误:

    AudioManager audioManager = (AudioManager)getApplicationContext().getSystemService(Context.AUDIO_SERVICE); 
    audioManager.setMode(AudioManager.MODE_IN_CALL);
    audioManager.setSpeakerphoneOn(true);
    

    【讨论】:

    • MODE_IN_CALL 保留给电话股票应用程序。更喜欢MODE_IN_COMMUNICATIONdeveloper.android.com/reference/android/media/…
    • 在huawei V/AudioManager上不起作用:setMode mode: 3 2019-09-25 19:38:30.577 1023-1560/? W/AudioService:当当前模式为 PID=13000、uid=10409 的 MODE_IN_CALL 时,禁止设置 MODE_IN_COMMUNICATION
    • 在 android 10 更新后也不能在像素 3 上工作。
    • 在 android 10 更新后也不能在像素 2 上工作
    • 搭载 Android 9 的三星 J4+ 需要 MODE_IN_CALL 才能获得 setSpeakerphoneOn(true) 才能打开扬声器。 MODE_IN_COMMUNICATION 不会发生这种情况。
    【解决方案3】:

    1.setSpeakerphoneOn() 仅适用于setMode(AudioManager.MDOE_IN_CALL);

    【讨论】:

      【解决方案4】:

      唯一对我有用的是设置

      audioManager.setMode(AudioManager.MODE_RINGTONE | AudioManager.MODE_IN_CALL);
      audioManager.setSpeakerphoneOn(true);
      

      没有 AudioManager.MODE_RINGTONE 它不起作用..

      感谢this post

      【讨论】:

      • 您运行的是什么设备和操作系统版本?对我来说,它不适用于 Galaxy S20、Android 11
      • AudioManager.MODE_* 不是位域,不能这样使用。 AudioManager.MODE_RINGTONE 是 1(二进制 01)和 AudioManager.MODE_IN_CALL 是 2(二进制 10),结果值是二进制 11,即 3,所以您的代码与调用 audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION) 相同,即根据官方文档推荐的 VoIP 值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-29
      • 2017-11-06
      • 1970-01-01
      • 1970-01-01
      • 2021-08-19
      • 1970-01-01
      相关资源
      最近更新 更多