android音量知识总结

当开发多媒体应用或者游戏应用的时候,需要使用音量控制键来设置程序的音量大小。在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