Android:如何在振动设置之间进行切换(始终,永不,仅在静音模式下,仅在非静音模式下)?再访
问题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最终在讨论中最终找到了自己的方式。他引用网站:
,并说:“我看了看com.android.settings的源代码。设置类的使能和禁止震动的方法”复制一部分。
我通过这个网站大力看了看,没找到他做了什么。任何人都可以澄清他的解决办法?
问题
有没有人有办法在“始终”,“从不”,“仅在静音模式”和“仅在不处于静音模式”之间精确切换?
我的解决方案(收入为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() ???)