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
};

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

按键设置

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

   //通过监听手机音量+-按钮实现主动设置@Overridepublic 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

Android 设置音量的几种方法相关推荐

  1. Android 设置字体的三种方法(TypeFace)

    Android系统默认字体支持四种字体,分别为: noraml (普通字体,系统默认使用的字体) sans(非衬线字体) serif (衬线字体) monospace(等宽字体) 除此之外还可以使用其 ...

  2. android修改密码功能,安卓手机设置开机密码几种方法介绍

    安卓系统的手机设置开机密码一般有2-3种,其中包括密码锁.图案锁.PIN密码锁等几项.这几项都能实现开机需要输入相应的密码才能使用手机的,所以也算是开机锁了.好了,下面小编就教大家怎么设置这几种锁. ...

  3. android 动画方式,Android Activity进出动画三种方法

    Android Activity进出动画三种方法 实现activity的进出场动画总共有3种方式,下面会一一列出,首先给出示例的动画xml文件. 动画的xml文件 android:fromYDelta ...

  4. android 实现毫秒定时器,Android实现定时器的五种方法实例详解

    一.Timer Timer是Android直接启动定时器的类,TimerTask是一个子线程,方便处理一些比较复杂耗时的功能逻辑,经常与handler结合使用. 跟handler自身实现的定时器相比, ...

  5. LoadRunner设置检查点的几种方法介绍

    LoadRunner设置检查点的几种方法介绍 发布时间: 2011-5-03 11:53    作者: 一米阳光做测试    来源: 51Testing软件测试网采编 字体:  小  中  大  | ...

  6. Android 更新UI的两种方法——handler和runOnUiThread()

    Android 更新UI的两种方法--handler和runOnUiThread() 在Android开发过程中,常需要更新界面的UI.而更新UI是要主线程来更新的,即UI线程更新.如果在主线线程之外 ...

  7. angular6 设置全局变量_angularjs 设置全局变量的3种方法

    angularjs 设置全局变量的3种方法 angularjs自身有二种,设置全局变量的方法,在加上js的设置全局变量的方法,总共有三种.要实现的功能是,在ng-app中定义的全局变量,在不同的ng- ...

  8. javascript设置颜色值的几种方法

    一.网页中设置颜色值的几种方法 1.英文命令颜色 p{color:red;} 2.RGB颜色 这个与 `photoshop` 中的 `RGB` 颜色是一致的,由 `R(red)`.`G(green)` ...

  9. Android结束进程的几种方法

    Android 结束进程的几种方法 在开发过程中,遇到了测试的说关闭应用的时候出现了闪一下黑屏的情况,后面发现闪黑屏和杀掉进程有关系,这里就简单总结一下结束进程的几种方法,以及闪黑屏是如何解决的,防止 ...

最新文章

  1. java super快速生成_为什么当我使用编辑器代码生成器时,eclipse会在构造函数中自动添加一个java super()方法?...
  2. 计算机应用基础学期教学小结,《计算机应用基础》的教学总结及小结.docx
  3. matplotlib多个饼状图
  4. 大型对冲基金正训练AI交易 5年后AI在量化中将成主流
  5. python怎么连接socket_python socket连接实现即时通讯
  6. 【SpringBoot】查看运行环境中所有的spring bean
  7. python gui界面启动脚本、点击按钮执行脚本_如何使用PyQt在按钮单击上调用python脚本...
  8. Oracle创建表空间、用户、分配权限、导出、导入数据
  9. Datawhale 人工智能培养方案
  10. 零序电流计算软件_每天5分钟跟我一起学电气之电力系统中的零序
  11. 【bzoj4897】[Thu Summer Camp2016]成绩单 区间dp
  12. htc a620d 刷android,续航以及最后的总结_HTC A620d - CNMO
  13. Python实现线性反馈移位寄存器实例信息安全导论期中小作业
  14. Python——集合运算
  15. ES集群状态检查报错:master_not_discovered_exception 503错误
  16. netbeans11安装教程_Netbeans使用教程
  17. 浅谈java中的ServerSocket和Socket的通信原理实现聊天及多人聊天
  18. linux 系统级性能分析工具 perf 的介绍与使用
  19. 5G商用价值到底在哪里,可以赋予哪些能力?
  20. 百度提供的LBS服务

热门文章

  1. java sse spring_【SpringBoot WEB 系列】SSE 服务器发送事件详解
  2. 5、C语言——前言(基础知识)
  3. Openstack-heat组件概念
  4. 动态SQL语句的拼接实现
  5. 和Sidecars说再见,看eBPF如何解决服务网格
  6. 信息技术Information Technology
  7. oracle 怎么使用跟踪,Oracle 10046跟踪事件使用方法
  8. 学籍管理系统制作教程第二天之 用户登陆界面(三层)
  9. IDEA 一个窗口打开多个项目ideal中如何添加几个不同的项目在同一个idea页面显示(30秒解决)
  10. Rides的常用知识点