【问题标题】:Vibrate settings on Android 2.2Android 2.2 上的振动设置
【发布时间】:2011-04-14 03:04:15
【问题描述】:

我正在制作一个振动切换小部件(事实上,它的第一个版本已经在市场上)但我在 Android 2.2 的振动设置方面遇到了一些问题。

直到 Android 2.1 我都没有问题,当我想禁用振动时我会这样做

am.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_OFF);
am.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION,AudioManager.VIBRATE_SETTING_OFF);

同样,但在两行都用VIBRATE_SETTING_ON 来打开它,它工作正常。

但是,由于 Android 2.2 引入了“仅在静音模式下振动”和“在非静音模式下振动”,我不知道如何使其工作。当振动设置为“始终”或“从不”时没有问题,但一旦用户手动将其设置为其他两个设置之一,应用就会开始做一些奇怪的事情。

例如,如果我将其设置为“仅在静音模式下振动”并通过我的小部件关闭振动,它会关闭,但当我重新打开它时...它会回到“仅在静音模式下”模式”而不是“始终”。实际上,除非您通过“设置”->“声音”进行设置,否则无法将其设置回“始终”,所以我猜振动模式的组合框正在做其他我不知道的事情。就像它将值存储在其他地方一样,因为即使我手动设置为“始终”,当我禁用它并通过小部件(使用我之前发布的代码)再次启用它时,它仍然会回到“仅在静音模式下振动” ”。

此外,AudioManager 类中有一个值“仅在静音模式下”(VIBRATE_SETTING_ONLY_SILENT),但是当您将其设置为“仅在非静音模式下”时,它使用 VIBRATE_SETTING_ON,因此无法检测到它(不是我所知道的,我的意思是)。

希望我没有太混乱,但我想提供所有可能的数据。有了这一切......

有人知道如何正确处理 2.2 中的振动设置吗?为了完全禁用或启用振动,我必须设置或调用任何其他变量吗?或者一种将手机“重置”到已知状态以使其正常工作的方法?

重现问题(或至少是其中一个问题)的步骤是:

  • 通过设置菜单将振动设置为“仅在静音模式下”。

  • 通过小部件将振动设置为“从不”:

    setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF);

  • 在设置菜单中检查振动设置为“从不”。

  • 通过小部件将振动设置为“始终”:

    setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ON);

  • 转到设置菜单 -> 振动设置为“仅在静音模式下”

【问题讨论】:

    标签: android settings vibration android-2.2-froyo


    【解决方案1】:

    好的,我想我终于修好了。
    我查看了com.android.settings.Settings类的源代码,复制了部分启用和禁用振动的方法:
    https://android.googlesource.com/platform/packages/apps/Settings/+/master/src/com/android/settings/SoundSettings.java

    谢谢你,magaio,你给我指明了正确的方向。

    【讨论】:

      【解决方案2】:

      当某些应用程序弄乱了我的 Nexus One 的个人设置时,我不得不自己弄乱这些设置。他们在这里:

      总是在响铃上振动:

      setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ON);
      

      不要在戒指上振动:

      setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF);
      

      仅在静音时振动:

      setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ONLY_SILENT);
      

      通知时始终振动:

      setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_ON);
      

      通知时不要振动:

      setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_OFF);
      

      仅在静音通知时振动:

      setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_ONLY_SILENT);
      

      Change ringer mode:

      AudioManager.setRingerMode(RINGER_MODE_NORMAL); AudioManager.setRingerMode(RINGER_MODE_SILENT); AudioManager.setRingerMode(RINGER_MODE_VIBRATE);

      振动设置独立于铃声设置。混乱随之而来。

      【讨论】:

      • 谢谢magaio,但我仍然有问题...我已添加步骤以重现问题中的问题。
      • LuTHieR,您可能需要结合使用振动设置和铃声设置。这很令人困惑,我知道。 Android 设置应用程序实际上正在更改铃声设置(请参阅答案底部的我的编辑)。如果你想要一个真正的永不振动,你需要 setVibrateSetting(... VIBRATE_SETTING_OFF) 和 setRingerMode(... RINGER_MODE_NORMAL)。试试看。
      • 再次谢谢你,我下午回家试试看是否有效:)
      • 嗨,magaio,抱歉耽搁了。我试过了,但它一直在做同样的事情:(我尝试在更改振动设置之前和之后将铃声模式设置为正常,但仍然没有运气。不过,感谢您的时间和想法:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      相关资源
      最近更新 更多