Android 修改系统音量及监听
【摘要】 效果修改系统音量这种操作还是挺常见的,一般在多媒体开发中都多少会涉及到。 常用方法 获取音频管理器mAudioManager = this.getSystemService(Context.AUDIO_SERVICE) as AudioManager 获取媒体音量最大值mMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.ST...
效果
修改系统音量
这种操作还是挺常见的,一般在多媒体
开发中都多少会涉及到。
常用方法
获取音频管理器
mAudioManager = this.getSystemService(Context.AUDIO_SERVICE) as AudioManager
获取媒体音量最大值
mMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
获取系统当前媒体音量
mCurrentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
这里涉及到几个常见音量类型
:
- STREAM_VOICE_CALL 通话
- STREAM_SYSTEM 系统
- STREAM_RING 铃声
- STREAM_MUSIC 媒体音量
- STREAM_ALARM 闹钟
- STREAM_NOTIFICATION 通知
获取系统音量模式
mAudioManager.ringerMode
音量模式:
- RINGER_MODE_NORMAL 正常
- RINGER_MODE_SILENT 静音
- RINGER_MODE_VIBRATE 震动
设置系统媒体音量
来看一下是如何修改音量的
btn_add.setOnClickListener {
if (mCurrentVolume < mMaxVolume) {
mCurrentVolume++
} else {
mCurrentVolume = mMaxVolume
}
updateNum(mCurrentVolume)
setStreamVolume(mCurrentVolume)
}
btn_reduce.setOnClickListener {
if (mCurrentVolume > 0) {
mCurrentVolume--
} else {
mCurrentVolume = 0
}
updateNum(mCurrentVolume)
setStreamVolume(mCurrentVolume)
}
注意,这里要判断一下是否超出了音量的最大值最小值。
在事件中,除了判断最大值最小值之外,还调用了两个方法
updateNum
更新页面显示:
/**
* 更新页面显示
*/
private fun updateNum(volume: Int) {
tv_volume.text = volume.toString()
seekBar.progress = volume
}
还调用了setStreamVolume
方法,这里就涉及到setStreamVolume
和adjustStreamVolume
的区别:
- setStreamVolume 直接设置音量,指哪打哪
- adjustStreamVolume 步长式设置音量,即10,20,30这样阶梯式
二者都可以设置音量,可以根据自己的业务需求来选择。
setStreamVolume
来看一下具体的setStreamVolume
方法:
private fun setStreamVolume(volume: Int) {
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, AudioManager.FLAG_SHOW_UI)
}
- 参数1:音量类型
- 参数2:音量数值
- 参数3:
- AudioManager.FLAG_SHOW_UI 调整音量时显示系统音量进度条 , 0 则不显示
- AudioManager.FLAG_ALLOW_RINGER_MODES 是否铃声模式
- AudioManager.FLAG_VIBRATE 是否震动模式
- AudioManager.FLAG_SHOW_VIBRATE_HINT 震动提示
- AudioManager.FLAG_SHOW_SILENT_HINT 静音提示
- AudioManager.FLAG_PLAY_SOUND 调整音量时播放声音
adjustStreamVolume
音量递增
private fun adjustRaise() {
mAudioManager.adjustStreamVolume(
AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_RAISE,
AudioManager.FLAG_SHOW_UI
)
}
- 参数1:音量类型
- 参数2:音量调整方向
- AudioManager.ADJUST_RAISE 音量逐渐递增
- AudioManager.ADJUST_LOWER 音量逐渐递减
- AudioManager.ADJUST_SAME 不变
- 参数3:同setStreamVolume参数3
音量递减
private fun adjustLower(volume: Int) {
mAudioManager.adjustStreamVolume(
AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_LOWER,
AudioManager.FLAG_SHOW_UI
)
}
监听音量控制按键
除了我们手动去改之外,用户也可以通过物理按键
或是耳机
来控制音量,这时,我们理应也要做出相应的改变,所以,还需要对音量按键做监听才行。
这里就用到熟悉的老方法了,重写Activity
的onKeyDown
方法:
/**
* 监听并接管系统的音量按键,
* 注意:最好保持原有逻辑不变
*/
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
when (keyCode) {
//音量+按键
KeyEvent.KEYCODE_VOLUME_UP -> {
if (mCurrentVolume < mMaxVolume) {
mCurrentVolume++
} else {
mCurrentVolume = mMaxVolume
}
updateNum(mCurrentVolume)
setStreamVolume(mCurrentVolume)
return true
}
//音量-按键
KeyEvent.KEYCODE_VOLUME_DOWN -> {
if (mCurrentVolume > 0) {
mCurrentVolume--
} else {
mCurrentVolume = 0
}
updateNum(mCurrentVolume)
setStreamVolume(mCurrentVolume)
return true
}
}
return super.onKeyDown(keyCode, event)
}
其实很简单,拦截事件,然后执行我们的逻辑就行了。
总结
总的来说,代码量并不多,难度系数也不高,唯一要注意的是各个参数的类型,要根据自己的实际业务来选择即可。
ok,至此关于修改音量
的讲解就全部结束了,如果对你有用,就点个赞吧^ - ^
Github
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)