Modificación de la configuración del sistema para el desarrollo todo en uno de Android———sonido

inserte la descripción de la imagen aquí
Modificación de la configuración del sistema para el desarrollo todo en uno de Android --- brillo de la pantalla

Modificación de la configuración del sistema para el desarrollo todo en uno de Android———sonido

Modifique la configuración del sistema para el desarrollo de máquinas todo en uno con Android --- bloqueo de pantalla automático

¡La serie de capítulos sobre la modificación de la configuración del sistema se abrirá pronto! Este capítulo le explicará el sonido en detalle.

Todos están familiarizados con la función de sonido . En la era multimedia, es muy necesario y también es una sección indispensable, pero en la aplicación real de la máquina todo en uno, lo que cambia aquí es el volumen de medios .

sonido

Varios "tipos de volumen" comunes: llamada STREAM_VOICE_CALL , sistema STREAM_SYSTEM , tono de llamada STREAM_RING , volumen multimedia STREAM_MUSIC , despertador STREAM_ALARM , notificación STREAM_NOTIFICATION .

Ideas de diseño

  1. Obtener Administrador de audio
  2. Obtener el valor máximo del volumen de medios
  3. Obtener el volumen de medios actual del sistema
  4. Establecer el volumen de medios del sistema a través de seekBar

Implementación

Obtener Administrador de audio
  • Java
 AudioManager mAudioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
  • kotlin
mAudioManager = this.getSystemService(Context.AUDIO_SERVICE) as AudioManager

Obtener el valor máximo del volumen de medios
  • Java
mMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
  • kotlin
mMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)

Obtener el volumen de medios actual del sistema
  • 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)

Establecer el volumen de medios del sistema

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

botón del sistema de monitoreo

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

operación completa

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


Recientemente, me tomé un descanso de mi apretada agenda, ↓↓↓↓[¿Quién es De Code Farmer, el Sr. Chen?]↓↓↓↓, ¡compartiré publicaciones de blog técnicas y contenido de información de alta energía con ustedes regularmente! ¡Bienvenidos a todos los jefes a que les gusten y sigan, son mi fuente de motivación!

Supongo que te gusta

Origin blog.csdn.net/chen_md/article/details/129006897
Recomendado
Clasificación