2

我试图做到这一点,所以当用户打开应用程序时,它会将音乐的音量设置为他们的手机铃声音量。到目前为止,这是我的代码,但我不确定 setVolume(float, float) 上的参数是什么。android文档没有很好地解释它。我的代码在这里做错了什么?

  AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
  int currentVolume = audio.getStreamVolume(AudioManager.STREAM_RING);

   mPlayer = MediaPlayer.create(this, R.raw.song);
   mPlayer.setOnErrorListener(this);

   if(mPlayer!= null)
    {         
    mPlayer.setLooping(true);
    mPlayer.setVolume(currentVolume,1);
}
4

1 回答 1

4

看起来audio.setStreamVolume是您想要的,但传入 STREAM_MUSIC 而不是 STREAM_RING。

注意:音乐音量和铃声音量可能有不同的最大值,因此您需要将它们标准化。为此使用 getStreamMaxVolume。

我以前没有这样做过,也没有编译过,但是代码应该是这样的

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

// Get the current ringer volume as a percentage of the max ringer volume.
int currentVolume = audio.getStreamVolume(AudioManager.STREAM_RING);
int maxRingerVolume = audio.getStreamMaxVolume(AudioManager.STREAM_RING);
double proportion = currentVolume/(double)maxRingerVolume;

// Calculate a desired music volume as that same percentage of the max music volume.
int maxMusicVolume = audio.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
int desiredMusicVolume = (int)(proportion * maxMusicVolume);

// Set the music stream volume.
audio.setStreamVolume(AudioManager.STREAM_MUSIC, desiredMusicVolume, 0 /*flags*/);
于 2012-05-23T02:22:48.557 回答