
 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码农陈先生】↓↓↓↓,里面定时给大家分享技术博文、前方高能资讯内容!欢迎各位老板点赞关注,你们就是我的动力源泉!



















