在通话过程中将扬声器设置为开启状态,但无法在Android 10及更高版本中使用

问题描述

权限

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" /> (Optional)

以下是在以下Android 10设备上正常运行的代码。

boolean isRunning;

public class PhoneListener extends PhoneStateListener {


    public void onCallStateChanged(int state,String incomingNumber) {
        Log.i(TAG,"CallRecorder PhoneListener::onCallStateChanged state:" + state + " incomingNumber:");

        switch (state) {
            case TelephonyManager.CALL_STATE_IDLE:
                Log.i(TAG,"CALL_STATE_IDLE");
                 new Handler().postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            if (!isPressedClose) {
                                if (moSharedPreferenceManager.isSpeakerOn()) {
                                    AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
                                    audioManager.setMode(AudioManager.MODE_NORMAL);
                                    if (audioManager.isSpeakerphoneOn())
                                        audioManager.setSpeakerphoneOn(fase);
                                }
                                isRunning = false;
                                handleRedial();
                            } else {
                                finish();
                            }
                        }
                    },3000);

                break;
            case TelephonyManager.CALL_STATE_RINGING:
                Log.i(TAG," CALL_STATE_RINGING");

                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                moSharedPreferenceManager.setResetCallOrAlert(true);
                Log.i(TAG,"CALL_STATE_OFFHOOK");
                
                if (moSharedPreferenceManager.isSpeakerOn()) {
                    new Thread() {
                        @Override
                        public void run() {
                            try {
                                while (!isRunning) {
                                    isRunning = true;
                                    sleep(1000);
                                    //Activate loudspeaker
                                    AudioManager audioManager = (AudioManager)
                                            getSystemService(Context.AUDIO_SERVICE);
                                    audioManager.setMode(AudioManager.MODE_IN_CALL);
                                    audioManager.adjustVolume(AudioManager.ADJUST_RAISE,AudioManager.FLAG_PLAY_SOUND);

                                    Log.i(TAG,"audioManager.isSpeakerphoneOn() : " + audioManager.isSpeakerphoneOn());

                                    if (!audioManager.isSpeakerphoneOn())
                                        audioManager.setSpeakerphoneOn(true);
                                    break;
                                }
                                Log.i(TAG,"audioManager.isSpeakerphoneOn() running ");
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }.start();
                }

                break;
        }
    }
}

尝试将应用置于前台,后台并从后台终止时。在任何情况下都不起作用

我已经检查了Google开发人员网站,但没有提及android 10限制或不起作用的内容。请咨询是否有线索。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...