Android:如何在震动设置(始终、从不、仅在静音模式下、仅在非静音模式下)之间切换?重访

4

问题

寻找在以下选项之间切换的方法:

  • 始终
  • 从不
  • 仅静音模式
  • 非静音模式时

这些选项可以通过手机上的路径——菜单>>设置>>声音>>振动——找到。

通过在手机上导航很容易更改(顺便说一下,我的手机是安卓2.3.3的摩托罗拉Atrix 2),但我还没有找到在我的代码中使用的方法。

代码

基本上,我有一些按钮,当点击时应该操作振动设置。其中一个按钮如下所示:

    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上有些重复的帖子。这个问题以前已经被提出过...
这里是:Android 2.2上的振动设置 而且(最近)在这里:更改振动设置

这些链接中的前一个提供了一个“答案”。LuTHieR最终参与了讨论,并最终自己找到了解决办法。他参考了该网站:

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

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

我仔细查看了这个网站,但没有找到他的方法。有人能澄清他的解决方案吗?

问题

有人有一种精确切换“始终”,“从不”,“仅在静音模式下”和“仅在非静音模式下”的方法吗?

1个回答

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() ??? )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接