我們知道,在平常調(diào)節(jié)音量的時候,是有一定的調(diào)節(jié)數(shù)值,
也就是,每按一次音量+/-,音量的增加/減小幅度,這個我們稱為:系統(tǒng)的音量步進值。
而,音量還有一定的范圍,系統(tǒng)的是:0到Max,Max不確定,這個稱為:系統(tǒng)的音量范圍。
在Android中,是有幾種類型的音量可以調(diào)節(jié):
STREAM_ALARM 警報
STREAM_MUSIC 音樂回放即媒體音量
STREAM_RING 鈴聲
STREAM_SYSTEM 系統(tǒng)
STREAM_VOICE_CALL 通話
Android中的所有音量都是通過:AudioManager 去管理的,也是通過它去調(diào)節(jié):

AudioManager .png
調(diào)節(jié)音量的方式有兩種,一種是漸進式,即像手動按音量鍵一樣,一步一步增加或減少:通過AudioManager的adjustStreamVolume方法;一種是直接自定義調(diào)節(jié)的幅度(步進值),直接調(diào)節(jié)音量大小。兩種方法任選其一就好,這里我們主要說的是通過自定義的dialog進行手動調(diào)節(jié)音量:其實方法很簡單,主要是我們需要將系統(tǒng)的音量拿到后然后對于seekBar進行滑動監(jiān)聽
mNowVolume = mMaxVolume * binding.seekVolume.getProgress() / binding.seekVolume.getMax();
audioManager.setStreamVolume(MUSIC, mNowVolume, AudioManager.FLAG_PLAY_SOUND);
if (volumeAdjustListener != null) {
volumeAdjustListener.onVolumeAdjust(mNowVolume);
}
然后我們需要放開回調(diào)讓用戶進行操作就可以了
private final VolumeAdjustListener volumeAdjustListener;
public interface VolumeAdjustListener {
void onVolumeAdjust(int volume);
}
最后是在需要的地方進行調(diào)用就完成了我們的操作了
/**
* 音量設置
*/
private fun showVolumeDialog() {
val dialog = SettingVoiceDialog(mContext) { volume ->
showToast("修改成功,當前音量為:$volume")
}
dialog.show()
}

實現(xiàn)效果圖
最后push上部分的API說明
可以設置對哪種類型的音量去調(diào)控,通過:AudioMngHelper.setAudioType,通過注解的方式限制了用戶的設置類型,在類的開頭可以看到,默認值是媒體類型。
可以對Flag進行全局的設置,通過:AudioMngHelper.setFlag,設置顯示UI或者聽到調(diào)節(jié)音效或者啥都沒。
get100CurrentVolume():以0-100為范圍,獲取當前的音量值
getSystemMaxVolume():獲取系統(tǒng)音量范圍的最大值
getSystemCurrentVolume():獲取系統(tǒng)音量范圍的當前值
addVoiceSystem():以系統(tǒng)步進值和范圍為基礎,音量+
subVoiceSystem():同上,音量-
addVoice100():以0-100范圍和自定義的步進值為基礎,音量+
subVoice100():同上,音量-
setVoiceStep100():設置DIY步進值,默認是2。