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

时间:2017-03-30 09:49:24

标签: android android-mediaplayer volume alarm 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();
    }
}

为确保音量不降低,我每5秒钟拨打以下电话。

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

我位于欧盟内部,因此可能是因插入耳机时处理最大音量的规定造成的。由于我只关心扬声器输出,我需要一个解决方法,即使是这种情况。

修改

我的应用程序以及系统应用程序(如闹钟)以及Nexus 5和6都会出现此问题。我也从其他手机制造商处阅读该问题的报告,因此我不要认为这个问题仅适用于nexus系列手机。我需要一个解决方法。

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

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

1 个答案:

答案 0 :(得分:2)

根据约翰的说法,

  

这是内置设备的功能,你不能设置如此之高的音量,直到用户不会自己允许它,因为它可以伤害耳朵,问题是扬声器和耳机音量没有分开

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

请查看thisthis以停用耳机。