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

2015-08-21  本文已影响3109人  lsxiao

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

音量调节

常用的音频流类型如下:

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

//获得一个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 类里面查看。

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

响铃模式

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

不同响铃模式作用如下:

来电振动

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


Android 5.1.0系统截图Android 5.1.0系统截图

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

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

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

结语

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

上一篇 下一篇

猜你喜欢

热点阅读