Android 一体机研发之修改系统设置————屏幕亮度
Android 一体机研发之修改系统设置————声音
Android 一体机研发之修改系统设置————自动锁屏
修改系统设置系列篇章马上开张了! 本章将为大家细节讲解声音。
对于声音功能大家都不陌生,在多媒体时代,它是很必要的,同样也是缺它不可的版块;而在一体机实际应用中,这里更改的是媒体音量。

声音
几个常见的 “音量类型”: STREAM_VOICE_CALL 通话、STREAM_SYSTEM 系统、STREAM_RING 铃声、 STREAM_MUSIC 媒体音量、STREAM_ALARM 闹钟、STREAM_NOTIFICATION 通知。
设计思路
- 获取音频管理器
- 获取媒体音量最大值
- 获取系统当前媒体音量
- 通过seekBar设置系统媒体音量
具体实现
获取音频管理器
- Java
AudioManager mAudioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
- Kotlin
mAudioManager = this.getSystemService(Context.AUDIO_SERVICE) as AudioManager
获取媒体音量最大值
- Java
mMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
- Kotlin
mMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
获取系统当前媒体音量
- Java
/**
* 获取系统媒体音量
* STREAM_VOICE_CALL 通话
* STREAM_SYSTEM 系统
* STREAM_RING 铃声
* STREAM_MUSIC 媒体音量
* STREAM_ALARM 闹钟
* STREAM_NOTIFICATION 通知
*/
mCurrentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
- Kotlin
mCurrentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
设置系统媒体音量
- Java
voiceBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
Log.e("进度显示 >>>", "onProgressChanged: " + progress);
//设置系统媒体音量
setStreamVolume(progress);
}
public void onStartTrackingTouch(SeekBar seekBar) {
}
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
/**
* 设置系统媒体音量
* setStreamVolume 直接设置音量
* adjustStreamVolume 步长式设置音量,即10,20,30这样阶梯式
* <p>
* 参数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 调整音量时播放声音
*/
private void setStreamVolume(int volume) {
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, AudioManager.FLAG_PLAY_SOUND);
}
- Kotlin
seekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
Log.i("onProgressChanged----", "" + progress)
mCurrentVolume = progress
//更新页面
updateNum(mCurrentVolume)
//设置媒体音量
setStreamVolume(mCurrentVolume)
}
override fun onStartTrackingTouch(seekBar: SeekBar?) {
}
override fun onStopTrackingTouch(seekBar: SeekBar?) {
}
})
/**
* 更新页面显示
*/
private fun updateNum(volume: Int) {
//tv_volume.text = volume.toString()
seekBar.progress = volume
}
/**
* 设置系统媒体音量
*/
private fun setStreamVolume(volume: Int) {
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, AudioManager.FLAG_SHOW_UI)
}
监听系统按键
//监听系统按键
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_DOWN:
if (mCurrentVolume > 0) {
mCurrentVolume--;
} else {
mCurrentVolume = 0;
}
voiceBar.setProgress(mCurrentVolume);
setStreamVolume(mCurrentVolume);
Log.e("音量减 >>", "onKeyDown: " + mCurrentVolume );
return true;
case KeyEvent.KEYCODE_VOLUME_UP:
if (mCurrentVolume < mMaxVolume) {
mCurrentVolume++;
} else {
mCurrentVolume = mMaxVolume;
}
voiceBar.setProgress(mCurrentVolume);
setStreamVolume(mCurrentVolume);
Log.e("音量加 >>", "onKeyDown: " + mCurrentVolume );
return true;
/* case KeyEvent.KEYCODE_VOLUME_MUTE:
return true;*/
}
return super.onKeyDown(keyCode, event);
}
完整操作
- Java
/**
* @author 拉莫帅
* @date 2023/2/8
* @address
* @Desc 修改系统声音(媒体声音)
*/
public class ChangeVoiceActivity extends AppCompatActivity {
private AudioManager mAudioManager;
private SeekBar voiceBar;
//当前音量
private int mCurrentVolume = 0;
//最大音量
private int mMaxVolume = 0;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chanage_voice);
init();
}
private void init() {
voiceBar = findViewById(R.id.voiceBar);
ImageView back = findViewById(R.id.back);
TextView title = findViewById(R.id.title);
title.setText("声音");
mAudioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
/**
* 获取系统媒体音量
* STREAM_VOICE_CALL 通话
* STREAM_SYSTEM 系统
* STREAM_RING 铃声
* STREAM_MUSIC 媒体音量
* STREAM_ALARM 闹钟
* STREAM_NOTIFICATION 通知
*/
mCurrentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
//获取媒体音量最大值
mMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
Log.e("进度 >>", "init: " + mCurrentVolume + "---" + mMaxVolume);
voiceBar.setMax(mMaxVolume);
//更新进度条
voiceBar.setProgress(mCurrentVolume);
back.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
finish();
}
});
voiceBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
Log.e("进度显示 >>>", "onProgressChanged: " + progress);
setStreamVolume(progress);
}
public void onStartTrackingTouch(SeekBar seekBar) {
}
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
//监听系统按键
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_DOWN:
if (mCurrentVolume > 0) {
mCurrentVolume--;
} else {
mCurrentVolume = 0;
}
voiceBar.setProgress(mCurrentVolume);
setStreamVolume(mCurrentVolume);
Log.e("音量减 >>", "onKeyDown: " + mCurrentVolume );
return true;
case KeyEvent.KEYCODE_VOLUME_UP:
if (mCurrentVolume < mMaxVolume) {
mCurrentVolume++;
} else {
mCurrentVolume = mMaxVolume;
}
voiceBar.setProgress(mCurrentVolume);
setStreamVolume(mCurrentVolume);
Log.e("音量加 >>", "onKeyDown: " + mCurrentVolume );
return true;
/* case KeyEvent.KEYCODE_VOLUME_MUTE:
return true;*/
}
return super.onKeyDown(keyCode, event);
}
/**
* 设置系统媒体音量
* setStreamVolume 直接设置音量
* adjustStreamVolume 步长式设置音量,即10,20,30这样阶梯式
* <p>
* 参数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 调整音量时播放声音
*/
private void setStreamVolume(int volume) {
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, AudioManager.FLAG_PLAY_SOUND);
}
}
- Kotlin
class VolumeActivity : AppCompatActivity() {
//音频管理器
private lateinit var mAudioManager: AudioManager
//当前音量
private var mCurrentVolume: Int = 0
//最大音量
private var mMaxVolume: Int = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_volume)
init()
setListener()
}
("SetTextI18n")
private fun init() {
mAudioManager = this.getSystemService(Context.AUDIO_SERVICE) as AudioManager
/**
* ringerMode 音量模式
* RINGER_MODE_NORMAL 正常
* RINGER_MODE_SILENT 静音
* RINGER_MODE_VIBRATE 震动
*/
when (mAudioManager.ringerMode) {
AudioManager.RINGER_MODE_NORMAL -> tv_mode.text = "当前音量模式:正常"
AudioManager.RINGER_MODE_SILENT -> tv_mode.text = "当前音量模式:静音"
AudioManager.RINGER_MODE_VIBRATE -> tv_mode.text = "当前音量模式:震动"
}
/**
* 获取系统媒体音量
* STREAM_VOICE_CALL 通话
* STREAM_SYSTEM 系统
* STREAM_RING 铃声
* STREAM_MUSIC 媒体音量
* STREAM_ALARM 闹钟
* STREAM_NOTIFICATION 通知
*/
mCurrentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
//获取媒体音量最大值
mMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
seekBar.max = mMaxVolume
tv_max.text = "最大音量:$mMaxVolume"
updateNum(mCurrentVolume)
}
private fun setListener() {
btn_mode.setOnClickListener {
mAudioManager.ringerMode = AudioManager.RINGER_MODE_NORMAL
tv_mode.text = "当前音量模式:正常"
}
seekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
Log.i("onProgressChanged----", "" + progress)
mCurrentVolume = progress
updateNum(mCurrentVolume)
setStreamVolume(mCurrentVolume)
}
override fun onStartTrackingTouch(seekBar: SeekBar?) {
}
override fun onStopTrackingTouch(seekBar: SeekBar?) {
}
})
}
/**
* 更新页面显示
*/
private fun updateNum(volume: Int) {
tv_volume.text = volume.toString()
seekBar.progress = volume
}
/**
* 设置系统媒体音量
* setStreamVolume 直接设置音量
* adjustStreamVolume 步长式设置音量,即10,20,30这样阶梯式
*
* 参数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 调整音量时播放声音
*/
private fun setStreamVolume(volume: Int) {
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, AudioManager.FLAG_SHOW_UI)
}
最近忙里偷闲,↓↓↓↓【谁家de码农陈先生】↓↓↓↓,里面定时给大家分享技术博文、前方高能资讯内容!欢迎各位老板点赞关注,你们就是我的动力源泉!