Android音量控制-AudioManager与来电振动

AudioManager是Android系统级服务,通过AudioManager可以管理响铃,通知,闹钟,音乐,通话,系统等音频流的音量大小。

音量调节

常用的音频流类型如下:

  • STREAM_RING:响铃
  • STREAM_MUSIC:音乐
  • STREAM_ALARM:闹钟
  • STREAM_VOICE_CALL:通话
  • STREAM_SYSTEM:系统(拨号键盘提示音、触摸提示音、锁屏提示音)
  • STREAM_NOTIFIACTION:通知

一般情况下,如果需要更改某一个音频流音量大小,可以通过如下的方式:

//获得一个AudioManager的实例
final AudioManager audioManager = mContext.getSystemService(Context.ALARM_SERVICE);

//获得闹钟音频流的最大音量(设置的音量只能小于最大音量)
final int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM);

//更改闹钟音量
audioManager.setStreamVolume(AudioManager.STREAM_ALARM,maxVolume/2,AudioManager.FLAG_PLAY_SOUND);

需要注意的是如果音频流是固定的,那么调用上列方法也是无法修改音量的。可以调用 AudioManager 实例的 isVolumeFixed() 方法进行判断。

同时,setStreamVolume方法还支持一些特定的FLAG值,使用 | 将不同的模式组合,在设置音量的时候触发,例如:AudioManager.FLAG_VIBRATE|AudioManager.FLAG_PLAY_SOUND设置时会振动和播放响应的音频流预览。更多的FLAG可以在 AudioManager 类里面查看。

此外,还有几个增减音量的方法

  • adjustVolume(int direction, intflags):根据direction(AudioManager.ADJUST_LOWER , AudioManager.ADJUST_RAISE )增加,减少优先级高的音频流的音量。
    ps.如果在打电话,此时通话优先级最高,如果在听歌,此时音乐流的优先级最高
  • adjustStreamVolume(int streamType, int direction, intflags):根据direction值增加,减少相应的音频流的音量。

响铃模式

STREAM_RING 支持响铃模式,通过 AudioManagersetRingerMode(int mode)方法可以设置响铃模式, 一共有 RINGER_MODE_SILENT,RINGER_MODE_VIBRATE,RINGER_MODE_NORMAL,RINGER_MODE_MAX 四种模式。

不同响铃模式作用如下:

  • Silent(静默):静音,并且不会振动。
  • Vibrate(振动):静音,振动
  • Normal(普通):响铃,可能会振动(启用来电振动选项才会振动)

来电振动

AudioManager中并没有提供来电振动的方法,但是在系统的音量设置界面可以看到有这个选项。


Android 5.1.0系统截图

通过分析Android中的自带Setting App源代码,我找到了设置此选项的方法:

  • Settings.System.putInt(getContentResolver(), Settings.System.VIBRATE_WHEN_RINGING, val ? 1 : 0)
  • Settings.System.getInt(getContentResolver(), Settings.System.VIBRATE_WHEN_RINGING, 0)

可以看到,在 com.android.settings.notification.NotificationSettings 类中,是通过调用 Settings.System.putInt() 方法来设置此选项值,通过 Settings.System.getInt() 来得到此选项的值。

android.provider.Settings 类中,可以看到 Settings.System.VIBRATE_WHEN_RINGING 的值为 vibrate_when_ringing ,是一个字符串类型的静态常量,但是在代码中是不能访问到的。

结语

通过以上的方式,基本上就可以自己撸一个情景模式的App出来了 :)



文/lsxiao(简书作者)
原文链接:http://www.jianshu.com/p/5d2343562e9d
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值