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 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出來了 :)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容