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

Posted

技术标签:

【中文标题】插入耳机时扬声器音量(警报)降低【英文标题】: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。

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

【问题讨论】:

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

按照约翰的说法,

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

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

查看this 或this 以禁用耳机。

【讨论】:

以上是关于插入耳机时扬声器音量(警报)降低的主要内容,如果未能解决你的问题,请参考以下文章

电脑显示未插入扬声器和耳机?

扬声器属性和平衡的命令行控制[关闭]

AudioQueue 音量太低

插入耳机时强制将声音输出到内置扬声器

插入耳机时强制音频到扬声器?

强制向扬声器发出音频警报