2012-07-09 32 views
4

問題Android:如何在振動設置之間進行切換(始終,永不,僅在靜音模式下,僅在非靜音模式下)?再訪

尋找方法來切換之間:從不模式模式

  • 始終
  • 僅在靜音
  • 僅在非靜音

這些選擇是通過路徑找到的 - - 菜單>>設置>>聲音>>振動---在手機上。

它是簡單的導航手機上的改變(順便說一句,我的手機是摩托羅拉Atrix 2採用Android 2.3.3),但我還沒有碰到過的方法在我的代碼使用。

代碼

我基本都點擊時要操縱震動設置按鈕。其中一個按鈕如下所示:

bSilent.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); 
      audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF); 
      audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_OFF); 

      Toast.makeText(getBaseContext(), "Set to Never", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

audioManager上面這段代碼的地方定義爲:

final AudioManager audioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE); 

,Android提供了AudioManager.setVibrateSetting,但它現在已經過時。相反,他們引用你到getRingerMode方法。

http://developer.android.com/reference/android/media/AudioManager.html

然而,使用這些函數(和它們的任意組合)不能有效地四個振動設置之間移動。例如,如果我從「始終」開始,那麼我看起來不可能達到「從不」。振動方法的所有組合只能在「始終」和「僅在靜音模式」之間移動。另一方面,如果我從「從不」開始,所提供的方法將只在「從不」和「僅在非靜音模式下」之間切換。

因此,假設我希望有我的手機在靜音模式,並希望它振動。然後,我決定我不希望它再振動。我無法從「始終」或「僅在無聲模式」切換到「從不」。

過去的解決方案和帖子

我知道這有點StackOverflow上重複的帖子。這個問題已經提出來了之前...

這裏:Vibrate settings on Android 2.2

和(最近)在這裏:Changing vibrate setting

前者的聯繫提供了一個「答案」。 LuthieR最終在討論中最終找到了自己的方式。他引用網站:

https://android.googlesource.com/platform/packages/apps/Settings/+/froyo-release/src/com/android/settings/SoundSettings.java

,並說:「我看了看com.android.settings的源代碼。設置類的使能和禁止震動的方法」複製一部分。

我通過這個網站大力看了看,沒找到他做了什麼。任何人都可以澄清他的解決辦法?

問題

有沒有人有辦法在「始終」,「從不」,「僅在靜音模式」和「僅在不處於靜音模式」之間精確切換?

回答

0

我的解決方案(收入爲String sParam振動模式設置,重構如果需要整數0-3):

AudioManager audioManager = getSystemService(Context.AUDIO_SERVICE); 

if(Build.VERSION.SDK_INT < 16) 
{ 
    // sParam may be: 
    // 0 - Always 
    // 1 - Never 
    // 2 - Only in silent mode (when sound is off) 
    // 3 - Only when not in silent mode (when sound is on) 

    if((sParam.equals("1") == true) || (sParam.equals("3") == true)) 
    { 
     Settings.System.putInt(Static.contextApplication.getContentResolver(), "vibrate_in_silent", 0); 
     if(sParam.equals("1") == true) 
      audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF); 

     if(sParam.equals("3") == true) 
      audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ON); 
    } 

    if((sParam.equals("0") == true) || (sParam.equals("2") == true)) 
    { 
     Settings.System.putInt(Static.contextApplication.getContentResolver(), "vibrate_in_silent", 1); 
     if(sParam.equals("0") == true) 
      audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ON); 
     if(sParam.equals("2") == true) 
      audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ONLY_SILENT); 
    } 
} 
// else (for new SDK > 16 via setRingerMode() ???) 
相關問題