Audiomanager扬声器不起作用

mot*_*s10 3 performance android android-audiomanager android-phone-call

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

final AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
audioManager.setSpeakerphoneOn(true);
Run Code Online (Sandbox Code Playgroud)

我试图检查setSpeakerphoneOn()音频管理器后,通过询问是否仍未打开扬声器isSpeakerphoneOn()

audioManager.isSpeakerphoneOn();
Run Code Online (Sandbox Code Playgroud)

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

E/AudioManager: Don't setBluetoothScoOn-PackageName: com.myapp.app  on = false
E/AudioManager: Don't setSpeakerphoneOn-PackageName: com.myapp.app  on = true
Run Code Online (Sandbox Code Playgroud)

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

在以下设备上不起作用:中兴Z981,华为p9,我已经尝试过,并android.permission.MODIFY_AUDIO_SETTINGS获得了批准。

Moh*_*jfp 6

嗨,阅读android开发人员文章

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

解释清楚

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

在清单中添加此行

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
Run Code Online (Sandbox Code Playgroud)


mot*_*s10 3

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

AudioManager audioManager = (AudioManager)getApplicationContext().getSystemService(Context.AUDIO_SERVICE); 
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(true);
Run Code Online (Sandbox Code Playgroud)

  • Android 10 更新后,该功能也不适用于 Pixel 3。 (3认同)
  • `MODE_IN_CALL` 保留给电话股票应用程序。更喜欢“MODE_IN_COMMUNICATION”。https://developer.android.com/reference/android/media/AudioManager.html#setMode(int) (2认同)
  • Android 10 更新后也不适用于 Pixel 2 (2认同)