我們知道碌廓,在平常調(diào)節(jié)音量的時候,是有一定的調(diào)節(jié)數(shù)值剩盒,
也就是谷婆,每按一次音量+/-,音量的增加/減小幅度辽聊,這個我們稱為:系統(tǒng)的音量步進(jìn)值纪挎。
而,音量還有一定的范圍跟匆,系統(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é):
調(diào)節(jié)音量的方式有兩種,一種是漸進(jìn)式,即像手動按音量鍵一樣,一步一步增加或減少:通過AudioManager的adjustStreamVolume方法;一種是直接自定義調(diào)節(jié)的幅度(步進(jìn)值)洋闽,直接調(diào)節(jié)音量大小。兩種方法任選其一就好财岔,這里我們主要說的是通過自定義的dialog進(jìn)行手動調(diào)節(jié)音量:其實方法很簡單吞杭,主要是我們需要將系統(tǒng)的音量拿到后然后對于seekBar進(jìn)行滑動監(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)讓用戶進(jìn)行操作就可以了
private final VolumeAdjustListener volumeAdjustListener;
public interface VolumeAdjustListener {
void onVolumeAdjust(int volume);
}
最后是在需要的地方進(jìn)行調(diào)用就完成了我們的操作了
/**
* 音量設(shè)置
*/
private fun showVolumeDialog() {
val dialog = SettingVoiceDialog(mContext) { volume ->
showToast("修改成功,當(dāng)前音量為:$volume")
}
dialog.show()
}
最后push上部分的API說明
可以設(shè)置對哪種類型的音量去調(diào)控,通過:AudioMngHelper.setAudioType锋勺,通過注解的方式限制了用戶的設(shè)置類型蚀瘸,在類的開頭可以看到,默認(rèn)值是媒體類型庶橱。
可以對Flag進(jìn)行全局的設(shè)置贮勃,通過:AudioMngHelper.setFlag,設(shè)置顯示UI或者聽到調(diào)節(jié)音效或者啥都沒苏章。
get100CurrentVolume():以0-100為范圍寂嘉,獲取當(dāng)前的音量值
getSystemMaxVolume():獲取系統(tǒng)音量范圍的最大值
getSystemCurrentVolume():獲取系統(tǒng)音量范圍的當(dāng)前值
addVoiceSystem():以系統(tǒng)步進(jìn)值和范圍為基礎(chǔ),音量+
subVoiceSystem():同上枫绅,音量-
addVoice100():以0-100范圍和自定義的步進(jìn)值為基礎(chǔ)泉孩,音量+
subVoice100():同上,音量-
setVoiceStep100():設(shè)置DIY步進(jìn)值并淋,默認(rèn)是2寓搬。