在上面一篇文章中 http://www.cnblogs.com/wii/archive/2012/03/18/2404947.html
我們已經可以控制GPS/WIFI/藍牙/飛行模式了,現在
我們再來控制系統的音量和振動。
sdk提供了一個類來控制系統音量和振動的更改api,android.media.AudioManager 通過這個類,我們
將手機設置為靜音或者振動,和更改振動的類型。AudioManager無法在代碼中實例化,需要通過Context.getSystemService(Context.AUDIO_SERVICE)獲取到其實例。ok,獲取到AudioManager實例后,我們可以通過調用AudioManager的方法setRingerMode來控制聲音的類型。setRingerMode方法接受一個參數,我們只要根據需要更改的類型值傳入就可以拉。這3個分別是:
public static final int RINGER_MODE_VIBRATE = 1;
public static final int RINGER_MODE_NORMAL = 2;
醬紫,我們就可以通過以下代碼將聲音更改為 靜音了。
audio.setRingerMode(AudioManager.RINGER_MODE_SILENT);
設置為靜音后在變成普通狀態可以通過調用一下代碼:
audio.setStreamVolume(AudioManager.RINGER_MODE_NORMAL, ringerVolume, 0);
其中第二個參數就是鈴音的音量。
OK,控制了聲音后,我們接下來控制振動吧。
對於振動,系統有幾種類型,分別是 始終,一律不,僅在靜音下來電振和僅在非靜音下來電振 4種。
對於振動的控制,也是功過AudioManager的實例來完成的,通過調用setVibrateSetting方法來實現設置手機振動。
對於setVibrateSetting方法,需要傳入2個參數,第一個是振動的類型,分別是 VIBRATE_TYPE_NOTIFICATION 和 VIBRATE_TYPE_RINGER。
第二個是振動類型分比是 VIBRATE_SETTING_ON,VIBRATE_SETTING_OFF,VIBRATE_SETTING_ONLY_SILENT,VIBRATE_SETTING_ON,
根據參數的名稱我們都知道具體的作用拉,我就不作解釋了。
接下來我們就實現系統里面提供的幾種振動類型吧
int ring_mode = -1;
switch(profile.vibrate) {
case ProfileConstants.VIBRATE_ALWAYS_ON: // 總是振動
vibrate_setting = AudioManager.VIBRATE_SETTING_ON;
ring_mode = 1;
break;
case ProfileConstants.VIBRATE_NEVER: // 重不振動
vibrate_setting = AudioManager.VIBRATE_SETTING_OFF;
ring_mode = 0;
break;
case ProfileConstants.VIBRATE_ONLY_IN_SILENT: // 靜音下振動
vibrate_setting = AudioManager.VIBRATE_SETTING_ONLY_SILENT;
ring_mode = 1;
break;
case ProfileConstants.VIBRATE_UNLESS_SILENT: // 非靜音下振動
vibrate_setting = AudioManager.VIBRATE_SETTING_ON;
ring_mode = 0;
break;
}
Settings.System.putInt(resolver, "vibrate_in_silent", ring_mode);
audio.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, vibrate_setting);
ok,醬紫我們就實現了跟系統提供的振動類型相同的功能了。