插入耳机时,扬声器音量(警报)会降低

Syz*_*ygy 9 android volume alarm android-mediaplayer android-audiomanager

我正试图通过最大音量的警报通道通过扬声器发出警报声.为此,我正在使用AudioManager和MediaPlayer.如果我插入耳机,仍然会通过扬声器播放闹钟,但是通过扬声器播放的闹钟音量会急剧下降,因此无法满足我的需要.

有没有办法防止音量下降?

我正在使用的代码是这样的:

public void startAlarmSound() {
    audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    audioManager.setSpeakerphoneOn(false);

    audioManager.setStreamVolume(AudioManager.STREAM_ALARM, audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM), 0);

    if (!alreadyPlaying)
        playAlarmSound();

    alreadyPlaying = true;
}

private void playAlarmSound() {
    mediaPlayer = new MediaPlayer();

    mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            mediaPlayer.start();
        }
    });
    try {
        mediaPlayer.setDataSource(this, Uri.parse("android.resource://com.mystuff.mine/" + R.raw.alarm_sound));
        mediaPlayer.prepare();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

为了确保音量没有降低,我每隔5秒调用一次以下音量.

audioManager.setStreamVolume(AudioManager.STREAM_ALARM, audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM), 0);
Run Code Online (Sandbox Code Playgroud)

我位于欧盟内部,所以它可能是由插入耳机时处理最大音量的规则引起的.由于我只关心扬声器输出,我需要一个解决方法,即使是这种情况.

编辑:

我的应用程序以及系统应用程序(如闹钟)以及Nexus 5和6都会出现此问题.因为我还从其他手机制造商那里阅读了该问题的报告,所以我不认为问题是nexus系列手机所独有的.我需要一个解决方法.

我刚检查了getStreamMaxVolume(AudioManager.STREAM_ALARM)和getStreamVolume(AudioManager.STREAM_ALARM)的结果.两者都显示7,无论耳机是否插入.

我注意到插入耳机时,音量指示器设置为最大,如果我减小并快速再次增加,它将增加到没有耳机时的音量.然而,由于这需要用户交互,这不是我正在寻找的解决方案.

小智 3

据约翰所说,

这是设备的内置功能,您不能将音量设置得太高,除非用户自己不允许,因为这会伤害耳朵,而且问题是扬声器和耳机音量没有分开

我认为您可能无法将您的卷填满。我建议您尝试查看是否可以禁用耳机(即使已插入),然后播放闹钟(因为耳机被禁用而使用最大音量),然后在闹钟关闭后重新启用耳机。

查看这个这个以禁用耳机。