Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用AudioManager.STREAM\u VOICE\u通话更改通话音量_Android_Android Audiomanager - Fatal编程技术网

Android 如何使用AudioManager.STREAM\u VOICE\u通话更改通话音量

Android 如何使用AudioManager.STREAM\u VOICE\u通话更改通话音量,android,android-audiomanager,Android,Android Audiomanager,我有一个电话申请表。我制作音轨并播放声音 AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, sampleRateInHz, AudioFormat.CHANNEL_CONFIGURATION_MONO, audioFormat, minBufferSize, AudioTrack.MODE_STREAM); 但当我按下音量按钮时,“媒体”的音量会改变,而不是“通话” 我可以让音量按钮控制“通话”音量吗

我有一个电话申请表。我制作音轨并播放声音

AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, sampleRateInHz, AudioFormat.CHANNEL_CONFIGURATION_MONO, audioFormat, minBufferSize, AudioTrack.MODE_STREAM);
但当我按下音量按钮时,“媒体”的音量会改变,而不是“通话”

我可以让音量按钮控制“通话”音量吗

我找到了一种改变“呼叫”音量的方法,但我需要使用设备上的音量按钮

audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, 10, AudioManager.FLAG_SHOW_UI);

我在in_CALL中使用Audio Manager setMode,它在我的VoIP应用程序中运行良好

audioManager.setMode(AudioManager.MODE_IN_CALL);


 @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        Log.d(THIS_FILE, "Key down : " + keyCode);
 switch (keyCode) {
            case KeyEvent.KEYCODE_VOLUME_DOWN:
            case KeyEvent.KEYCODE_VOLUME_UP:

                // Volume has been adjusted by the user.

                Log.d(THIS_FILE, "onKeyDown: Volume button pressed");
                int action = AudioManager.ADJUST_RAISE;
                if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
                    action = AudioManager.ADJUST_LOWER;
                }

                // Detect if ringing
                SipCallSession currentCallInfo = getActiveCallInfo();
                // If not any active call active
                if (currentCallInfo == null && serviceConnected) {
                    break;
                }

                if (service != null) {
                    try {
                        service.adjustVolume(currentCallInfo, action, AudioManager.FLAG_SHOW_UI);
                    } catch (RemoteException e) {
                        Log.e(THIS_FILE, "Can't adjust volume", e);
                    }
                }
                return true;
}

我在in_CALL中使用Audio Manager setMode,它在我的VoIP应用程序中运行良好

audioManager.setMode(AudioManager.MODE_IN_CALL);


 @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        Log.d(THIS_FILE, "Key down : " + keyCode);
 switch (keyCode) {
            case KeyEvent.KEYCODE_VOLUME_DOWN:
            case KeyEvent.KEYCODE_VOLUME_UP:

                // Volume has been adjusted by the user.

                Log.d(THIS_FILE, "onKeyDown: Volume button pressed");
                int action = AudioManager.ADJUST_RAISE;
                if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
                    action = AudioManager.ADJUST_LOWER;
                }

                // Detect if ringing
                SipCallSession currentCallInfo = getActiveCallInfo();
                // If not any active call active
                if (currentCallInfo == null && serviceConnected) {
                    break;
                }

                if (service != null) {
                    try {
                        service.adjustVolume(currentCallInfo, action, AudioManager.FLAG_SHOW_UI);
                    } catch (RemoteException e) {
                        Log.e(THIS_FILE, "Can't adjust volume", e);
                    }
                }
                return true;
}

这解决了我的问题。但这是一个骗局。感谢玛尤·潘查的想法

public boolean onKeyUp(int keyCode, KeyEvent event) {
    switch (keyCode) {
        case KeyEvent.KEYCODE_VOLUME_DOWN:
        case KeyEvent.KEYCODE_VOLUME_UP:
            return true;
    }
    return super.onKeyUp(keyCode, event);
}

public boolean onKeyDown(int keyCode, KeyEvent event) {
     switch (keyCode) {
        case KeyEvent.KEYCODE_VOLUME_DOWN:
        case KeyEvent.KEYCODE_VOLUME_UP:
            AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
            audioManager.adjustStreamVolume(streamType, (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) ? -1 : 1, AudioManager.FLAG_SHOW_UI);
            return true;
    }
    return super.onKeyDown(keyCode, event);
}

我尝试使用
audioManager.setMode(audioManager.MODE\u IN\u CALL)
,但在我所有的手机上都不起作用。

这解决了我的问题。但这是一个骗局。感谢玛尤·潘查的想法

public boolean onKeyUp(int keyCode, KeyEvent event) {
    switch (keyCode) {
        case KeyEvent.KEYCODE_VOLUME_DOWN:
        case KeyEvent.KEYCODE_VOLUME_UP:
            return true;
    }
    return super.onKeyUp(keyCode, event);
}

public boolean onKeyDown(int keyCode, KeyEvent event) {
     switch (keyCode) {
        case KeyEvent.KEYCODE_VOLUME_DOWN:
        case KeyEvent.KEYCODE_VOLUME_UP:
            AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
            audioManager.adjustStreamVolume(streamType, (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) ? -1 : 1, AudioManager.FLAG_SHOW_UI);
            return true;
    }
    return super.onKeyDown(keyCode, event);
}

我尝试使用
audioManager.setMode(audioManager.MODE\u IN\u CALL)
,但它在我的所有手机上都不起作用。

我在我的baresip voip应用程序中使用它:


   override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
        when (keyCode) {
            KeyEvent.KEYCODE_VOLUME_DOWN, KeyEvent.KEYCODE_VOLUME_UP -> {
                am.adjustStreamVolume(volumeControlStream,
                        if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
                            AudioManager.ADJUST_LOWER else
                            AudioManager.ADJUST_RAISE,
                        AudioManager.FLAG_SHOW_UI)
                return true
            }
        }
        return super.onKeyDown(keyCode, event)
    }
当电话进来时,我就开始

volumeControlStream = AudioManager.STREAM_RING
当建立呼叫时,我必须设置

volumeControlStream = AudioManager.STREAM_MUSIC

因为出于某种原因,设置为
AudioManager.STREAM\u VOICE\u CALL
即使在通信模式为
AudioManager.mode\u时也不起作用


   override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
        when (keyCode) {
            KeyEvent.KEYCODE_VOLUME_DOWN, KeyEvent.KEYCODE_VOLUME_UP -> {
                am.adjustStreamVolume(volumeControlStream,
                        if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
                            AudioManager.ADJUST_LOWER else
                            AudioManager.ADJUST_RAISE,
                        AudioManager.FLAG_SHOW_UI)
                return true
            }
        }
        return super.onKeyDown(keyCode, event)
    }
当电话进来时,我就开始

volumeControlStream = AudioManager.STREAM_RING
当建立呼叫时,我必须设置

volumeControlStream = AudioManager.STREAM_MUSIC

因为出于某种原因,设置为
AudioManager.STREAM\u VOICE\u CALL
即使在模式为
AudioManager.mode\u IN\u COMMUNICATION
时也不起作用,我尝试了:AudioManager.setMode(AudioManager.mode\u IN\u CALL),但当我单击音频按钮时,steel有媒体音量。您必须将您的音频管理器转到CALL service.adjustVolume(当前CallInfo,action,AudioManager.FLAG_SHOW_UI);我尝试:AudioManager.setMode(AudioManager.MODE_在调用中),但当我单击audio按钮时,steel有媒体音量。您必须将音频管理器转到CALL service.adjustVolume(当前CallInfo,action,AudioManager.FLAG_SHOW_UI);