Android獲取、調(diào)節(jié)系統(tǒng)音量

我們知道,在平常調(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。

代碼傳送門

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容