我正在开发一个根据特定间隔播放一些声音的应用程序。我让用户控制这些声音的音量。现在告诉它可以,并且音量级别与用户之前选择的级别相同。但是这里的问题是设备音量也发生了变化。
问题是:如何在不影响设备音量的情况下以我的音量播放声音?
defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
int streamMaxVolume = mAudioManager.getStreamMaxVolume(3);
vol = defaultSharedPreferences.getInt("vol_one", streamMaxVolume);
mAudioManager.setStreamVolume(3, vol, 0);
playsound();
更新:根据Biraj解决方案
要获取每个设备允许的最大音量,请使用int streamMaxVolume而不是MAX_VOLUME变量。
因此,完整的答案是:
AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
int streamMaxVolume = mAudioManager.getStreamMaxVolume(3);
vol = defaultSharedPreferences.getInt("vol_one", streamMaxVolume);
setVolume(vol);
*
*
*
public void setVolume(int soundVolume){
final float volume = (float) (1 - (Math.log(streamMaxVolume- soundVolume) / Math.log(streamMaxVolume)));
mediaPlayer.setVolume(volume, volume);
}
最佳答案
不要使用AudioManager
到setVolume
。使用MediaPlayer.setVoume()
private final static int MAX_VOLUME = 100;
public void setVolume(int soundVolume){
final float volume = (float) (1 - (Math.log(MAX_VOLUME - soundVolume) / Math.log(MAX_VOLUME)));
mediaPlayer.setVolume(volume, volume);
}
说明:
setVolume (float leftVolume, float rightVolume)
设置此播放器的音量。建议使用此API来平衡应用程序中音频流的输出。除非您正在编写控制用户设置的应用程序,否则应优先使用此API来代替setStreamVolume(int,int,int),后者设置特定类型的所有流的量。请注意,传递的体积值是0.0到1.0范围内的原始标量。 UI控件应按对数比例缩放。
参量
leftVolume左音量标量
rightVolume右音量标量
有关更多信息,请访问HERE
关于android - 使用我的音量设置播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26485039/