Android:如何在振动设置之间切换(始终、从不、仅在静默模式下、仅在不在静默模式下)?重游

Android:如何在振动设置之间切换(始终、从不、仅在静默模式下、仅在不在静默模式下)?重游,android,settings,vibration,Android,Settings,Vibration,问题 查找要在以下两者之间切换的方法: 总是 从来没有 仅在静默模式下 仅当不处于静默模式时 这些选项可通过手机上的路径---Menu>>设置>>声音>>振动---找到 通过手机导航进行更改很简单(顺便说一句,我的手机是摩托罗拉Atrix 2,搭载安卓2.3.3),但我还没有在代码中找到使用的方法 代码 我基本上有按钮,当点击时可以操纵振动设置。此处显示了其中一个按钮: bSilent.setOnClickListener(new View.OnClickListener()

问题

查找要在以下两者之间切换的方法:

  • 总是
  • 从来没有
  • 仅在静默模式下
  • 仅当不处于静默模式时
这些选项可通过手机上的路径---Menu>>设置>>声音>>振动---找到

通过手机导航进行更改很简单(顺便说一句,我的手机是摩托罗拉Atrix 2,搭载安卓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.setVibration设置,但现在不推荐使用。相反,它们将您引用到getRingerMode方法

但是,使用这些功能(以及它们的任何组合)无法在四个振动设置之间有效移动。例如,如果我从“总是”开始,我似乎不可能达到“从不”。所有振动方法的组合只能在“始终”和“仅在静默模式下”之间移动。另一方面,如果我从“从不”开始,提供的方法将仅在“从不”和“仅当不处于静默模式时”之间切换

因此,假设我想让我的手机处于静音模式,并希望它振动。然后,我决定我不希望它再振动了。我无法从“始终”或“仅在静默模式下”切换到“从不”

过去的解决方案和帖子

我知道这是StackOverflow上的一篇重复文章。这个问题以前就提过了

在这里:

(最近)在这里:

前一个链接提供了一个“答案”。路德最终在一次讨论中找到了一条自己的路。他参考了该网站:

并说“我查看了com.android.settings.settings类的源代码,复制了启用和禁用振动的部分方法”

我仔细查看了这个网站,找不到他做了什么。有人能澄清他的解决方案吗

问题

是否有人有办法精确地在“始终”、“从不”、“仅在静默模式下”和“仅在不在静默模式下”之间切换?

我的解决方案(设置了所需振动模式的income
字符串sParam的函数路径,如果需要,重构为整数0-3):

AudioManager AudioManager=getSystemService(Context.AUDIO\u服务);
如果(Build.VERSION.SDK_INT<16)
{
//斯巴拉姆可能是:
//0-始终
//1-从不
//2-仅在静音模式下(声音关闭时)
//3-仅当不处于静音模式时(当声音打开时)
if((sParam.equals(“1”)==true)| |(sParam.equals(“3”)==true))
{
Settings.System.putInt(Static.contextApplication.getContentResolver(),“无声振动”,0);
if(sParam.equals(“1”)==true)
audioManager.SetVibrationSetting(audioManager.Vibrange\u类型\u振铃器,audioManager.Vibrange\u设置\u关闭);
if(sParam.equals(“3”)==true)
audioManager.SetVibranceSettings(audioManager.Vibrange\u类型\u振铃器,audioManager.Vibrange\u设置\u开启);
}
if((sParam.equals(“0”)==true)| |(sParam.equals(“2”)==true))
{
Settings.System.putInt(Static.contextApplication.getContentResolver(),“静默中振动”,1);
if(sParam.equals(“0”)==true)
audioManager.SetVibranceSettings(audioManager.Vibrange\u类型\u振铃器,audioManager.Vibrange\u设置\u开启);
if(sParam.equals(“2”)==true)
audioManager.SetVibranceSettings(audioManager.Vibrange\u TYPE\u RINGER,audioManager.Vibrange\u Settings\u ONLY\u SILENT);
}
}
//else(对于通过setRingerMode()创建的大于16的新SDK)
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() ??? )