2012-07-09 69 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() ???) 
相关问题