当开发多媒体应用或者游戏应用的时候,需要使用音量控制键来设置程序的音量大小。在Android系统中有多中音频流,通过Activity中的函数 setVolumeControlStream(int streamType)可以设置该Activity中音量控制键控制的音频流,一般在onCreate函数中设置。

Android中有如下几种音频流:

•AudioManager.STREAM_MUSIC /** The audio stream for music playback */
•AudioManager.STREAM_RING /** The audio stream for the phone ring */
•AudioManager.STREAM_ALARM /** The audio stream for alarms */
•AudioManager.STREAM_NOTIFICATION /** The audio stream for notifications */
•AudioManager.STREAM_SYSTEM /** The audio stream for system sounds */
•AudioManager.STREAM_VOICECALL /** The audio stream for phone calls */

setVolumeControlStream函数描述:

void android.app.Activity .setVolumeControlStream(int streamType)
Suggests an audio stream whose volume should be changed by the hardware volume controls.

The suggested audio stream will be tied to the window of this Activity. If the Activity is switched, the stream set here is no longer the suggested stream. The client does not need to save and restore the old suggested stream value in onPause and onResume.

Parameters:
streamType The type of the audio stream whose volume should be changed by the hardware volume controls. It is not guaranteed that the hardware volume controls will always change this stream's volume (for example, if a call is in progress, its stream's volume may be changed instead). To reset back to the default, use AudioManager.USE_DEFAULT_STREAM_TYPE .

/

Android中有如下几种音频流(streamType是需要调整音量的类型):

* AudioManager.STREAM_MUSIC  /音乐回放即媒体音量/
    * AudioManager.STREAM_RING /铃声/
    * AudioManager.STREAM_ALARM  /警报/
    * AudioManager.STREAM_NOTIFICATION /窗口顶部状态栏通知声/
    * AudioManager.STREAM_SYSTEM  /系统/
    * AudioManager.STREAM_VOICECALL /通话 /
    * AudioManager.STREAM_DTMF /双音多频,不是很明白什么东西 /

AudioManager可以修改系统Android系统的音量,下面介绍几个AudioManager的几个音量调整方面的方法.
首先是得到AudioManager实例:
Java代码  收藏代码

1. AudioManager am=(AudioManager)getSystemService(Context.AUDIO_SERVICE);

调整音量方法有两种,一种是渐进式,即像手动按音量键一样,一步一步增加或减少,另一种是直接设置音量值.
1、渐进式
Java代码  收藏代码

1. public void adjustStreamVolume (int streamType, int direction, int flags)  
   2.   
   3. am.adjustStreamVolume (AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);

解释一下三个参数

Java代码  收藏代码

1. 第一个streamType是需要调整音量的类型,这里设的是媒体音量,可以是:  
   2. STREAM_ALARM 警报  
   3. STREAM_MUSIC 音乐回放即媒体音量  
   4. STREAM_NOTIFICATION 窗口顶部状态栏Notification,  
   5. STREAM_RING 铃声  
   6. STREAM_SYSTEM 系统  
   7. STREAM_VOICE_CALL 通话  
   8. STREAM_DTMF 双音多频,不是很明白什么东西  
   9.   
  10. 第二个direction,是调整的方向,增加或减少,可以是:  
  11. ADJUST_LOWER 降低音量  
  12. ADJUST_RAISE 升高音量  
  13. ADJUST_SAME 保持不变,这个主要用于向用户展示当前的音量  
  14.   
  15. 第三个flags是一些附加参数,只介绍两个常用的  
  16. FLAG_PLAY_SOUND 调整音量时播放声音  
  17. FLAG_SHOW_UI 调整时显示音量条,就是按音量键出现的那个  
  18. 0 表示什么也没有

2、直接设置音量值的方法:
Java代码  收藏代码

1. public void setStreamVolume (int streamType, int index, int flags)  
   2.   
   3. am.setStreamVolume(AudioManager.STREAM_MUSIC, am.getStreamMaxVolume(AudioManager.STREAM_MUSIC), AudioManager.FLAG_PLAY_SOUND);  
   4. am.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL);//得到听筒模式的最大值  
   5. am.getStreamVolume(AudioManager.STREAM_VOICE_CALL);//得到听筒模式的当前值

第一个和第三个参数与上面的相同
第二个参数是一个音量的int值,getStreamMaxVolume(int streamType)得到的是该类型音量的最大值,可以根据这个值计算你需要的音量,我这里直接调到最大.

//

AudioManager类位于android.Media 包中,该类提供访问控制音量和钤声模式的操作。

官方文档中注明了:Use Context.getSystemService(Context.AUDIO_SERVICE) to get an instance of this class.

所以我们可以通过下面的语句获得:

[java] view plaincopyprint?

1. AudioManager audiomanage = (AudioManager)getAcitivity().getSystemService(Context.AUDIO_SERVICE);

AudioManager audiomanage = (AudioManager)getAcitivity().getSystemService(Context.AUDIO_SERVICE);

audiomanager就是我们定义的控制系统声音的对象。

这里只讲述几个比较常用到的方法:

adjustVolume(int direction, int flags)

用来控制手机音量大小,

当传入的第一个参数为AudioManager.ADJUST_LOWER 时,可将音量调小一个单位,

传入AudioManager.ADJUST_RAISE时,则可以将音量调大一个单位。

adjustStreamVolume(int streamType, int direction, intflags)

(以步长)调节手机音量大小
参数1:声音类型,可取为STREAM_VOICE_CALL(通话)、STREAM_SYSTEM(系统声音)、STREAM_RING(铃声)、STREAM_MUSIC(音乐)、STREAM_ALARM(闹铃声)
参数2:调整音量的方向,可取ADJUST_LOWER(降低)、ADJUST_RAISE(升高)、ADJUST_SAME
参数3:可选的标志位

setStreamVolume(int streamType, int index, intflags)

直接设置音量大小

getMode()

返回当前音频模式,如 NORMAL(普通), RINGTONE(铃声), orIN_CALL(通话)

setMode()

设置声音模式,可取值NORMAL(普通), RINGTONE(铃声), or IN_CALL(通话)

getRingerMode()

返回当前的铃声模式。如RINGER_MODE_NORMAL(普通)、RINGER_MODE_SILENT(静音)、RINGER_MODE_VIBRATE(震动)

setRingerMode(int ringerMode)

改变铃声模式

getStreamVolume(int streamType)

取得当前手机的音量,最大值为7,最小值为0,当为0时,手机自动将模式调整为“震动模式”。

getStreamMaxVolume(int streamType)

获得当前手机最大铃声。

setStreamMute(int streamType, boolean state)
静音或不静音音频流
设置指定声音类型(streamType)是否为静音。如果state为true,则设置为静音;否则,不设置为静音。
[java] view plaincopyprint?

1. //音量控制,初始化定义  
   2.   
   3. AudioManager mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);  
   4. //最大音量  
   5. int maxVolume =mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);  
   6. //当前音量  
   7. int currentVolume =mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

//音量控制,初始化定义

AudioManager mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
//最大音量
int maxVolume =mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
//当前音量
int currentVolume =mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

直接控制音量的多少:
[java] view plaincopyprint?

1. if(isSilent){  
   2.   mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,0, 0);  
   3. }else{  
   4.   mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,tempVolume, 0);//tempVolume:音量绝对值  
   5. }

if(isSilent){
  mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,0, 0);
}else{
  mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,tempVolume, 0);//tempVolume:音量绝对值
}

以一步步长控制音量的增减,并弹出系统默认音量控制条:
[java] view plaincopyprint?

1. //降低音量,调出系统音量控制  
   2. if(flag ==0){  
   3.   mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_LOWER,  
   4.                             AudioManager.FX_FOCUS_NAVIGATION_UP);  
   5. }  
   6. //增加音量,调出系统音量控制  
   7. else if(flag ==1){  
   8.   mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_RAISE,  
   9.                             AudioManager.FX_FOCUS_NAVIGATION_UP);  
  10. }

//降低音量,调出系统音量控制
if(flag ==0){
  mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_LOWER,
                            AudioManager.FX_FOCUS_NAVIGATION_UP);
}
//增加音量,调出系统音量控制
else if(flag ==1){
  mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_RAISE,
                            AudioManager.FX_FOCUS_NAVIGATION_UP);
}

常用方法:
android audioManager获取音量:
先获取AudioManager实例,
AudioManager mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

[java] view plaincopyprint?

1. //通话音量  
   2.   
   3. int max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL );   
   4.   
   5. int current = mAudioManager.getStreamVolume(AudioManager.STREAM_VOICE_CALL );   
   6.   
   7. //系统音量  
   8.   
   9. int max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_SYSTEM );   
  10.   
  11. current = mAudioManager.getStreamVolume(AudioManager.STREAM_SYSTEM );   
  12.   
  13. //铃声音量  
  14.   
  15. max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_RING);   
  16.   
  17. current = mAudioManager.getStreamVolume(AudioManager.STREAM_RING );   
  18.   
  19. //音乐音量  
  20.   
  21. max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC );   
  22.   
  23. current = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC );   
  24.   
  25.   
  26.   
  27. //提示声音音量  
  28.   
  29. max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM );   
  30.   
  31. current = mAudioManager.getStreamVolume(AudioManager.STREAM_ALARM );

转载于:https://www.cnblogs.com/wjhblogs/p/4308819.html

android音量知识总结相关推荐

  1. Android基础知识——完善

    首页 下载App × Android基础知识--完善 布鲁马 2016.05.17 10:29* 字数 5478 阅读 2672评论 1喜欢 38 疯狂Android摘要,Android基础知识好乱好 ...

  2. android基础知识

    技术型男 随笔 - 20, 文章 - 0, 评论 - 4, 引用 - 0 android基础知识 1. 前言 1.1. 什么是3G.4G Ÿ 第三代移动通信技术(3rd - Generation),速 ...

  3. Android音量控制曲线

    摘要:本文介绍了android音量的控制曲线的计算方法. 由于人耳对声音的听感具指数曲线型,也就是对小音量时比较敏感,随着声音的加大其听感随之变的不敏感,其变化近似指数函数曲线的形式.为了使听感变的近 ...

  4. Xamarin Android教程Android基本知识版本介绍与系统介绍

    Xamarin Android教程Android基本知识版本介绍与系统介绍 Xamarin Android教程Android基本知识版本介绍与系统介绍,开发Andriod有时候不像iOS一样轻松,因为 ...

  5. Android进阶知识:绘制流程(上)

    1.前言 之前写过一篇Android进阶知识:事件分发与滑动冲突,主要研究的是关于Android中View事件分发与响应的流程.关于View除了事件传递流程还有一个很重要的就是View的绘制流程.一个 ...

  6. Android一些知识总结

    Android一些知识总结 近来看zp的android视频,按照他的视频中开发了几个小软件,学到了一些自己以前都没有学到的知识,所以在这儿总结一下,偶尔温习对自己有很大的帮助吧. 1.关于paddin ...

  7. Android小知识10则(上)(2018.8重编版)

    Android小知识10则(下) 目录 前言 横竖屏锁定 不同分辨率的图标 将字符串写在资源文件中 为AlertDialog设置点击监听 ProgressDialog了解一下 最后 前言 Androi ...

  8. MTK 驱动(4)---MTK Android Driver知识大全

    MTK Android Driver知识大全 一.Display 1.lcm 相关概念 1.1) MIPI接口:一共有三种接口:DBI(也做CPU或MCU接口).DPI(也叫RGB接口).DSI. 在 ...

  9. Android小知识10则(下)

    Android小知识10则(上) github传送门 注: 在目录中点击可以跳转到具体代码页 目录 Chronometer和CountDownTimer计时器 Chronometer的使用 Count ...

  10. Android基础知识:在UI线程中运行代码

    本文翻译自:Android basics: running code in the UI thread In the viewpoint of running code in the UI threa ...

最新文章

  1. cisco路由器基本命令配置
  2. Python报错:The truth value of an array with more than one element is ambiguous
  3. python 字符串分割_python中分割字符串split切割并选择输出 逐行读取文件后字符串拼接...
  4. $HOME/$user/.权限导致用户无法登陆图形界面
  5. Linux下安装Apache Maven安装
  6. 【iOS开发】理解Action、IBACtion、Action Connection
  7. 带参数的RedirectToAction
  8. iOS内存管理部分内容
  9. 敏捷开发 角色英文简称
  10. 速读原著-TCP/IP(Archie、WAIS、Gopher、Veronica和WWW)
  11. IntelliJ IDEA设置护眼浅绿色背景及文字大小
  12. 张良(?—前189年)
  13. 缓存加速------Redis的五种数据类型(String,List,Hash,Set,Sorted Set)
  14. 惊!又一家知名企业被查!
  15. 1.FastAPI简介
  16. python分钟转化为小时_Python将分钟转为小时和分钟
  17. 系统报错信息:[0x7FFA30288660] ANOMALY: meaningless REX prefix used
  18. 【Python常用代码归纳】
  19. 最新 Flink 1.13 时间和窗口(时间语义、Watermark、Window 窗口、Trigger)快速入门、详细教程
  20. 问一个sql方面的问题

热门文章

  1. java 区间api_Java 常用API(一)
  2. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_15-异常处理-异常处理流程...
  3. 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_22-页面查询服务端开发-Dao-基础方法测试...
  4. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第5节 线程池_1_线程池的概念和原理...
  5. 蓝桥杯刷题 -- 第六届蓝桥杯
  6. hihocoder-Week195-奖券兑换
  7. thinkphp实现文件上传
  8. UVa 10003 Cutting Sticks(区间DP)
  9. 解决docker-compose: command not found
  10. spring 跨域 CORS (Cross Origin Resources Share) 跨域