Android 2.2上的振动设置

时间:2010-09-18 15:52:37

标签: android settings vibrate android-2.2-froyo vibration

我正在制作一个振动切换小部件(事实上,它的第一个版本已经在市场上)但我在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引入了“仅在静音模式下振动”和“在不在静音模式下振动”,我不知道如何使其工作。当vibrate设置为“Always”或“Never”时没有问题,但是一旦用户手动将其设置为其他两个设置之一,应用程序就会开始做一些奇怪的事情。

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

而且,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);

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

2 个答案:

答案 0 :(得分:9)

当某些应用程序搞砸了我的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);

振动设置与振铃设置无关。随之而来的是混乱。

答案 1 :(得分:1)

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

无论如何,谢谢magaio,你指出了我正确的方向。