【问题标题】:Speaker Volume (Alarm) decreases when Headphones are plugged in插入耳机时扬声器音量(警报)降低
【发布时间】:2017-08-24 03:57:22
【问题描述】:

我正在尝试通过扬声器通过警报通道以最大音量播放警报声音。为此,我使用了 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 都会出现此问题。因为我还阅读了其他手机制造商关于该问题的报告,所以我没有t 认为这个问题是 nexus 系列手机独有的。我需要一个解决方法。

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

我确实注意到在插入耳机的情况下,当音量指示器设置为最大时,如果我降低它并再次快速增加它,它将增加到没有耳机时的音量。但是,由于这需要用户交互,所以这不是我正在寻找的解决方案。

【问题讨论】:

  • 您指的是哪个具体部分?唯一看起来有帮助的是 mediaPlayer.setVolume(1,1)。我试过了,但没有解决问题。
  • 问题是不能只增加扬声器的音量。但无论如何尝试 audioManager.requestAudioFocus(null, AudioManager.STREAM_ALARM, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
  • 如果耳机音量也增加,这不是问题,但在这种情况下,欧盟法规可能会造成问题。我今天晚些时候会检查 requestAudioFocus ,但我很确定这是我已经尝试过的事情之一 - 至少从文档来看它似乎无济于事(尽管这个问题听起来很像那里描述的音量闪避。 )
  • 这是设备自带的功能,你不能把音量调的这么高,除非用户自己不允许,否则会伤耳朵,问题是扬声器和耳机音量没有分开跨度>

标签: android android-mediaplayer volume alarm android-audiomanager


【解决方案1】:

按照约翰的说法,

这是设备的内置功能,你不能把音量调得太高,除非用户自己不允许,否则会伤耳朵,问题是扬声器和耳机的音量没有分开

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

查看thisthis 以禁用耳机。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 2016-05-20
    相关资源
    最近更新 更多