Android 使用我的音量设置播放声音

Android 使用我的音量设置播放声音,android,audio,Android,Audio,我正在开发一个应用程序,根据特定的间隔播放一些声音。我让用户控制这些声音的音量。现在告诉用户一切正常,音量水平与用户之前选择的相同。但这里的问题是,设备的音量水平也发生了变化。 问题是:如何在不影响设备音量的情况下以音量播放我的声音 defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); AudioManager mAudioManager = (AudioManager) getSystem

我正在开发一个应用程序,根据特定的间隔播放一些声音。我让用户控制这些声音的音量。现在告诉用户一切正常,音量水平与用户之前选择的相同。但这里的问题是,设备的音量水平也发生了变化。 问题是:如何在不影响设备音量的情况下以音量播放我的声音

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
设置音量。使用MediaPlayer.setVoume()

说明:

setVolume (float leftVolume, float rightVolume)
设置此播放机的音量。建议使用此API来平衡应用程序中音频流的输出。除非您编写应用程序来控制用户设置,否则此API应优先于设置特定类型的所有流的卷的setStreamVolume(int,int,int)。请注意,传递的体积值是0.0到1.0范围内的原始标量。UI控件应按对数缩放

参数

左卷左卷标量

右卷右卷标量


有关更多信息,请访问不要使用
AudioManager
setVolume
。使用MediaPlayer.setVoume()

说明:

setVolume (float leftVolume, float rightVolume)
设置此播放机的音量。建议使用此API来平衡应用程序中音频流的输出。除非您编写应用程序来控制用户设置,否则此API应优先于设置特定类型的所有流的卷的setStreamVolume(int,int,int)。请注意,传递的体积值是0.0到1.0范围内的原始标量。UI控件应按对数缩放

参数

左卷左卷标量

右卷右卷标量


有关更多信息,请访问不要使用
AudioManager
setVolume
。使用MediaPlayer.setVoume()

说明:

setVolume (float leftVolume, float rightVolume)
设置此播放机的音量。建议使用此API来平衡应用程序中音频流的输出。除非您编写应用程序来控制用户设置,否则此API应优先于设置特定类型的所有流的卷的setStreamVolume(int,int,int)。请注意,传递的体积值是0.0到1.0范围内的原始标量。UI控件应按对数缩放

参数

左卷左卷标量

右卷右卷标量


有关更多信息,请访问不要使用
AudioManager
setVolume
。使用MediaPlayer.setVoume()

说明:

setVolume (float leftVolume, float rightVolume)
设置此播放机的音量。建议使用此API来平衡应用程序中音频流的输出。除非您编写应用程序来控制用户设置,否则此API应优先于设置特定类型的所有流的卷的setStreamVolume(int,int,int)。请注意,传递的体积值是0.0到1.0范围内的原始标量。UI控件应按对数缩放

参数

左卷左卷标量

右卷右卷标量


有关更多信息,请访问

谢谢。但是你这么说是什么意思(我指的是参数):mediaPlayer.setVolume(volume,volume);它将设置MediaPlayer的音量,并且不会影响设备设置。您能解释更多吗?setVolume方法中有两个参数,volume和volume!!那些是什么?哪一个是浮动值?其他(音量)参数是什么?如何检测设备的最大允许音量?因为我认为设备有不同的最大容量谢谢。但是你这么说是什么意思(我指的是参数):mediaPlayer.setVolume(volume,volume);它将设置MediaPlayer的音量,并且不会影响设备设置。您能解释更多吗?setVolume方法中有两个参数,volume和volume!!那些是什么?哪一个是浮动值?其他(音量)参数是什么?如何检测设备的最大允许音量?因为我认为设备有不同的最大容量谢谢。但是你这么说是什么意思(我指的是参数):mediaPlayer.setVolume(volume,volume);它将设置MediaPlayer的音量,并且不会影响设备设置。您能解释更多吗?setVolume方法中有两个参数,volume和volume!!那些是什么?哪一个是浮动值?其他(音量)参数是什么?如何检测设备的最大允许音量?因为我认为设备有不同的最大容量谢谢。但是你这么说是什么意思(我指的是参数):mediaPlayer.setVolume(volume,volume);它将设置MediaPlayer的音量,并且不会影响设备设置。您能解释更多吗?setVolume方法中有两个参数,volume和volume!!那些是什么?哪一个是浮动值?其他(音量)参数是什么?如何检测设备的最大允许音量?因为我认为设备的最大容量不同