Android 设置音量的几种方法

您所在的位置:网站首页 当前系统处于通话状态默认仅可以调节音量 Android 设置音量的几种方法

Android 设置音量的几种方法

#Android 设置音量的几种方法| 来源: 网络整理| 查看: 265

Android 设置音量的几种方法 Android 设置音量的几种方法方法一、被动设置法方法二、主动设置法渐进设置直接设置按键设置

Android 设置音量的几种方法

在Android下,音量调节是区分streamType的,不同的streamType会有不同的音量值,所以设置音量需要指定设置的是哪种streamType。

Android中有如下几种音频流(streamType是需要调整音量的类型): AudioManager.STREAM_MUSIC /音乐回放即媒体音量/ AudioManager.STREAM_RING /铃声/ AudioManager.STREAM_ALARM /警报/ AudioManager.STREAM_NOTIFICATION /窗口顶部状态栏通知声/ AudioManager.STREAM_SYSTEM /系统/ AudioManager.STREAM_VOICECALL /通话 / AudioManager.STREAM_DTMF /双音多频,不是很明白什么东西 /

Android下设置音量,有下面几种常用的做法。

方法一、被动设置法

Activity.setVolumeControlStream(int streamType)

通过上面的setVolumeControlStream方法,可以将手机的音量调节硬件按键关联到Activity的UI上,一旦该Activity的Ui在前台,那么音量调节键就会影响特定streamType的音量。

通常,可以在Activity的onCreate函数里进行设置,在不同的Activity间切换时,设置值不需要重新设置,系统会帮你切换。

方法二、主动设置法

主动设置法又分为渐进设置和直接设置两种

渐进设置

AudioManager.adjustStreamVolume (int streamType, int direction, int flags)

通过该方法,你可以渐进地调节音量,各个参数含义如下: 第一个是streamType,见前文。 第二个direction,是音量调节的方向,可以取下面的几个值: ADJUST_LOWER 降低音量 ADJUST_RAISE 升高音量 ADJUST_SAME 保持不变,使用这个值UI上会向用户展示当前的音量 第三个flags,是附加参数,用于影响设置过程中的一些系统行为,两个常用的是: FLAG_PLAY_SOUND 调整音量时播放声音 FLAG_SHOW_UI 调整时显示音量条,跟按按键调节音量时出现的音量条一致 0 表示什么额外行为也没有,比如想自己绘制音量条时,可以使用这个值防止显示系统默认的音量条

直接设置

AudioManager.setStreamVolume (int streamType, int level, int flags)

第一个和第三个参数与前文adjustStreamVolume 的相同。第二个参数是一个音量的int值。

设置时,可以先通过getStreamMaxVolume(int streamType)得到streamType类型的音量最大值,然后根据这个值计算你需要的音量值。

需要注意的是,对于不同类型的音量,Android规定了不同的范围。在AudioService中有一个数组,定义了不同音量的范围,例如某个版本取值如下:

private final int[] MAX_STREAM_VOLUME = new int[] {   5, // STREAM_VOICE_CALL   7, // STREAM_SYSTEM   7, // STREAM_RING   15, // STREAM_MUSIC   7, // STREAM_ALARM   7, // STREAM_NOTIFICATION   15, // STREAM_BLUETOOTH_SCO   7, // STREAM_SYSTEM_ENFORCED   15, // STREAM_DTMF   15 // STREAM_TTS };

直接设置方式也可以通过按键控制的方式进行

按键设置

也可以监听硬件音量调节按键来主动设置,例如

//通过监听手机音量+-按钮实现主动设置 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_VOLUME_DOWN: if (0 == mVolumeLevel) { return true; } --mVolumeLevel; mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mVolumeLevel, AudioManager.FLAG_SHOW_UI); return true; case KeyEvent.KEYCODE_VOLUME_UP: if (MAX_MUSIC_VOLUME == mVolumeLevel) { return true; } ++mVolumeLevel; mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mVolumeLevel, AudioManager.FLAG_SHOW_UI); return true; } return super.onKeyDown(keyCode, event); }

[1] : https://www.jianshu.com/p/ad847db6904e [2] : https://blog.csdn.net/cf8833/article/details/89360609



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3