gpt4 book ai didi

Android 10 - 音频设置权限拒绝 : setSpeakerphoneOn()

转载 作者:行者123 更新时间:2023-12-02 12:56:27 27 4
gpt4 key购买 nike

我在 Android 10 上运行,无法使用 Kotlin 打开免提电话。下面是我的代码,它在调用期间总是显示 False。

主要 Activity .kt

val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
audioManager.mode = AudioManager.MODE_IN_COMMUNICATION
audioManager.isSpeakerphoneOn = true
if (audioManager.isSpeakerphoneOn)
Toast.makeText(this, "True", Toast.LENGTH_SHORT).show()
else
Toast.makeText(this, "False", Toast.LENGTH_SHORT).show()

AndroidManifest.xml

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

日志

04-18 10:43:58.064  1313  3118 W AS.AudioService: Audio Settings Permission Denial: setSpeakerphoneOn() from pid=8073, uid=10213

最佳答案

我能够使用 InCallService 解决这个问题,我正在使用它来开发一个应用程序作为默认拨号器。您所要做的就是获取扩展 InCallService 的 CallService 类的实例。由于在 Android 10 上您不能直接使用 setSpeakerphoneOn(),它在 Android 9 上运行良好。InCallService 有一个方法 setAudioRoute(),您可以使用它来路由音频。到目前为止,我已经在 Android 10 和 9 上测试了以下代码。还测试了 Wouter Vanhauwaert 在通话期间交替使用扬声器和听筒的问题,该问题也可以正常工作。我的代码如下。

CallService.java

public class CallService extends InCallService {

private static CallService sInstance;
……

@Override
public void onCreate() {
super.onCreate();
sInstance = this;
}
public static CallService getInstance(){
return sInstance;
}
}

AnotherActivity.java

public void toggleSpeaker() {
AudioManager am = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);
boolean isSpeakerOn = audioManager.isSpeakerphoneOn();
int earpiece = CallAudioState.ROUTE_WIRED_OR_EARPIECE;
int speaker = CallAudioState.ROUTE_SPEAKER;

if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.P){
CallService.getInstance().setAudioRoute(isSpeakerOn ? earpiece : speaker);
} else {
am.setSpeakerphoneOn(!isSpeakerOn);
}
}

关于Android 10 - 音频设置权限拒绝 : setSpeakerphoneOn(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61284015/

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