Modification of system settings for Android all-in-one development———sound

insert image description here
Modify system settings for Android all-in-one research and development——screen brightness

Modification of system settings for Android all-in-one development———sound

Modification of system settings for Android all-in-one development——automatically lock the screen

The series of chapters on modifying system settings will open soon! This chapter will explain the sound in detail for you.

Everyone is familiar with the sound function . In the multimedia era, it is very necessary, and it is also an indispensable section; but in the actual application of the all-in-one machine, what is changed here is the media volume .

sound

Several common "volume types": STREAM_VOICE_CALL call , STREAM_SYSTEM system , STREAM_RING ringtone , STREAM_MUSIC media volume , STREAM_ALARM alarm clock , STREAM_NOTIFICATION notification .

Design ideas

  1. Get Audio Manager
  2. Get the maximum value of the media volume
  3. Get the current media volume of the system
  4. Set system media volume via seekBar

Implementation

Get Audio Manager
  • Java
 AudioManager mAudioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
  • Kotlin
mAudioManager = this.getSystemService(Context.AUDIO_SERVICE) as AudioManager

Get the maximum value of the media volume
  • Java
mMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
  • Kotlin
mMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)

Get the current media volume of the system
  • 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)

Set system media volume

  • 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)
    }

monitor system button

	//监听系统按键
    
    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);
    }

complete operation

  • 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)
    }


Recently, I took a break from my busy schedule, ↓↓↓↓[Who’s De Code Farmer Mr. Chen]↓↓↓↓, I will share technical blog posts and high-energy information content with you regularly! Welcome all bosses to like and follow, you are my source of motivation!

Guess you like

Origin blog.csdn.net/chen_md/article/details/129006897