Android audioManager

AudioManager provides access to volume and ringer mode control.

获取对象

Use Context.getSystemService(Context.AUDIO_SERVICE) to get an instance of this class.

AudioManager mAudioManager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);

//通话音量
int max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_VOICE_CALL );
int current = mAudioManager.getStreamVolume( AudioManager.STREAM_VOICE_CALL );
Log.d(“VIOCE_CALL”, “max : ” + max + ” current : ” + current);

//系统音量
max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_SYSTEM );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_SYSTEM );
Log.d(“SYSTEM”, “max : ” + max + ” current : ” + current);

//铃声音量
max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_RING );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_RING );
Log.d(“RING”, “max : ” + max + ” current : ” + current);

//音乐音量
max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_MUSIC );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_MUSIC );
Log.d(“MUSIC”, “max : ” + max + ” current : ” + current);

//提示声音音量
max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_ALARM );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_ALARM );
Log.d(“ALARM”, “max : ” + max + ” current : ” + current);

获取当前正在播放音频的硬件信息

if (isBluetoothA2dpOn()) {
    // Adjust output for Bluetooth. 蓝牙设备 }
else if (isSpeakerphoneOn()) {
     // Adjust output for Speakerphone. 内置扬声器(免提) }
else if (isWiredHeadsetOn()) {
    // Adjust output for headsets 有线耳机 }
else {
    // If audio plays and noone can hear it, is it still playing? 未知设备 }

出现硬件设备切换的时候,Android 会发送系统广播 ACTION_AUDIO_BECOMING_NOISY ,您的应用程序中应该注册一个 BroadcastReceiver 来监听这个消息,当出现这种情况的时候,如果正在听音乐,较好的设计方案是暂停当前音乐的播放,如果正在玩游戏,那么尽量降低游戏的音量是个不错的解决方法。

几个比较常用到的方法:
方法1:adjustVolume(int direction, int flags)
解释:这个方法用来控制手机音量大小,当传入的第一个参数为 AudioManager.ADJUST_LOWER 时,可将音量调小一个单位,传入 AudioManager.ADJUST_RAISE 时,则可以将音量调大一个单位。
方法2:getMode()
解释:返回当前音频模式。
方法3:getRingerMode()
解释:返回当前的铃声模式。
方法4:getStreamVolume(int streamType)
解释:取得当前手机的音量,最大值为7,最小值为0,当为0时,手机自动将模式调整为“震动模式”。

注意: 分为9个单位 静音(0),震动(0),1----7 九个等级。从静音调为1时,需要调大两个等级. 
方法5:setRingerMode(int ringerMode)
解释:改变铃声模式

//声音模式
AudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
//静音模式
AudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
//震动模式
AudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);

//打开扬声器

audioManager.setMode(AudioManager.ROUTE_SPEAKER);
         currVolume = audioManager.getStreamVolume(AudioManager.STREAM_VOICE_CALL);
         if(!audioManager.isSpeakerphoneOn()) {
              audioManager.setSpeakerphoneOn(true);
              audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,
                  audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL ),
                  AudioManager.STREAM_VOICE_CALL);
         }

// 关闭扬声器

if(audioManager.isSpeakerphoneOn()) {
             audioManager.setSpeakerphoneOn(false);
             audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,currVolume,
                   AudioManager.STREAM_VOICE_CALL);
        }

最新文章

  1. [Erlang 0118] Erlang 杂记 V
  2. 基于小脚丫的ADC081S101 电压采集595数码管显示
  3. cordova常用资料源
  4. velocity模板引擎学习(3)-异常处理
  5. [Codeforces] 347B - Fixed Points
  6. LINUX 内核导论
  7. Peter's Hobby
  8. sql server基础学习之引号
  9. Spring 4学习——问题与注意事项(一)
  10. Java数据持久层框架 MyBatis之API学习二(入门)
  11. volatile特性及内存语义
  12. LOJ.2865.[IOI2018]狼人(Kruskal重构树 主席树)
  13. PPI | protein-protein interaction | 蛋白互作分析
  14. 【BZOJ1449】 球队收益
  15. win7频繁提示资源管理器已停止工作解决办法
  16. java作业第三次作业
  17. sublime格式化js、css、html的通用插件-html js css pretty
  18. springboot中radis配置和使用【进阶二】
  19. 一、初识java
  20. HDU - 4763 找出特殊规律的串

热门文章

  1. GTK+重拾--07 GTK+中的事件
  2. Django导出excel中文乱码解决方案
  3. Property Animator基本用法
  4. ARDUINO使用GPRS发送GPS数据到OneNet测试
  5. HDU - 1430 魔板 【BFS + 康托展开 + 哈希】
  6. nova 为何要做互信
  7. 单链表(C++实现)
  8. POJ Layout
  9. Spring Cloud之统一fallback接口
  10. 51nod 1196