Android媒体播放器设置音量问题

Android媒体播放器设置音量问题,android,android-mediaplayer,Android,Android Mediaplayer,到目前为止,我一直在通过设置流音量来设置我的MediaPlayer音量。我不想再这样做了,因为这会干扰用户设置。我现在从一个SeekBar(0到100)中获取值,然后执行valueFromSeekBar/100,以获得一个介于0和1之间的浮点值,用于MediaPlayer.setVolume(float,float) 问题是音量似乎没有改变。下面是我如何设置MediaPlayer的方法: player.setAudioStreamType(AudioManager.STREAM_ALARM);

到目前为止,我一直在通过设置流音量来设置我的
MediaPlayer
音量。我不想再这样做了,因为这会干扰用户设置。我现在从一个
SeekBar
(0到100)中获取值,然后执行
valueFromSeekBar/100
,以获得一个介于0和1之间的
浮点值,用于
MediaPlayer.setVolume(float,float)

问题是音量似乎没有改变。下面是我如何设置MediaPlayer的方法:

player.setAudioStreamType(AudioManager.STREAM_ALARM);
player.setLooping(true);
player.prepare();

float alarmVolume = AudioUtils.getMediaPlayerScaledVolume(100, alarm.volume);
if(NetworkUtils.isInCall(context)) {
    alarmVolume = IN_CALL_VOLUME;
}
mediaPlayer.setVolume(alarmVolume, alarmVolume); //I've even tried hardcoding 0.1f
无论我做什么,似乎都会忽略我在MediaPlayer.setVolume中输入的值,而使用流的卷(在本例中为报警流)。当流音量设置为最大时,最明显的是,我播放两个音频文件,一个使用
MediaPlayer.setVolume(1f,1f)
,另一个使用
MediaPlayer.setVolume(0.01f,0.01f)
。它们几乎无法区分。我需要一种方法,让我的用户能够将
SeekBar
定位在1并获得几乎听不见的声音,或者定位在100并获得最大声音。这是可能的,还是我必须回去处理流?

设置音量:

它将设置报警流的最大值(100)

amanager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
amanager.setStreamVolume(AudioManager.STREAM_ALARM, amanager.getStreamMaxVolume(AudioManager.STREAM_ALARM), AudioManager.FLAG_PLAY_SOUND);

你能有两个对象“player”和“mediaPlayer”吗?在这里,我只是使用了该API,它的工作原理与预期一致。

我不想弄乱用户的音频设置。如果另一个应用程序获得了音频焦点,并且用户没有想到音量会这么大,那么这可能会导致问题。在我使用完卷后恢复卷也可能会出现问题。无论如何,我今天一直在测试它与
MediaPlayer.setVolume
一起使用,这也没有任何帮助。