gpt4 book ai didi

android - AudioManager 中的 setSpeakerphoneOn 不会更改 android 12 上的扬声器值,它始终保持为 false。为什么?

转载 作者:行者123 更新时间:2023-12-04 23:44:50 35 4
gpt4 key购买 nike

fun toggleSpeaker(context: Context) {
isSpeakerPhoneSelected.value?.let {
val audioManager: AudioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
audioManager.setSpeakerphoneOn = !it
isSpeakerPhoneSelected.value = !it
logDebug(context, it.toString().plus(audioManager.isSpeakerphoneOn.toString()))
}
}
记录器显示 isSpeakerPhoneSelected 值在 true 和 false 之间切换,但 isSpeakerphoneOn 始终返回 false。这从 Android 12 开始停止工作。
这些是我们的 build.gradle 中的版本:
        buildToolsVersion = "29.0.3"
minSdkVersion = 23
compileSdkVersion = 30
targetSdkVersion = 30
supportLibVersion = "28.0.0"
是什么导致 isSpeakerphoneOn 值不改变以及如何解决这个问题?一段时间以来,我一直在为此苦苦挣扎,所以我很感激任何建议:p 谢谢!

最佳答案

我之前将 targetSDKLevel 设置为 android 12 时遇到了同样的问题。我有一个调用屏幕,在该屏幕上我提供了一个扬声器按钮,用户可以通过该按钮打开/关闭扬声器。
我用了音频设备信息 用于 android 12 的 API,用于在 audioManager 上设置通信设备。

public void switchSpeakerState() {
if (isSpeakerOn) {
isSpeakerOn = false;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) {
Utils.getInstance().setCommunicationDevice(getContext(), AudioDeviceInfo.TYPE_BUILTIN_EARPIECE);
} else {
audioManager.setSpeakerphoneOn(false);
}
ivSpeaker.setImageResource(R.drawable.speaker_outline);
} else {
isSpeakerOn = true;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) {
Utils.getInstance().setCommunicationDevice(getContext(), AudioDeviceInfo.TYPE_BUILTIN_SPEAKER);
} else {
audioManager.setSpeakerphoneOn(true);
}
ivSpeaker.setImageResource(R.drawable.speaker_filled);
}
}
实用程序.java
@RequiresApi(api = Build.VERSION_CODES.S)
public void setCommunicationDevice(Context context, Integer targetDeviceType) {
AudioManager audioManager = (AudioManager) context.getSystemService(AUDIO_SERVICE);
List < AudioDeviceInfo > devices = audioManager.getAvailableCommunicationDevices();
for (AudioDeviceInfo device: devices) {
if (device.getType() == targetDeviceType) {
boolean result = audioManager.setCommunicationDevice(device);
Log.d("result: ", result);
}
}
}

关于android - AudioManager 中的 setSpeakerphoneOn 不会更改 android 12 上的扬声器值,它始终保持为 false。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72098404/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com