Android 一体机研发之修改系统设置————声音

在这里插入图片描述
Android 一体机研发之修改系统设置————屏幕亮度

Android 一体机研发之修改系统设置————声音

Android 一体机研发之修改系统设置————自动锁屏

修改系统设置系列篇章马上开张了! 本章将为大家细节讲解声音。

对于声音功能大家都不陌生,在多媒体时代,它是很必要的,同样也是缺它不可的版块;而在一体机实际应用中,这里更改的是媒体音量

声音

几个常见的 “音量类型”: STREAM_VOICE_CALL 通话STREAM_SYSTEM 系统STREAM_RING 铃声STREAM_MUSIC 媒体音量STREAM_ALARM 闹钟STREAM_NOTIFICATION 通知

设计思路

  1. 获取音频管理器
  2. 获取媒体音量最大值
  3. 获取系统当前媒体音量
  4. 通过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码农陈先生】↓↓↓↓,里面定时给大家分享技术博文、前方高能资讯内容!欢迎各位老板点赞关注,你们就是我的动力源泉!

猜你喜欢

转载自blog.csdn.net/chen_md/article/details/129006897
今日推荐