Android 2.2上的振动设置

LuT*_*ieR 1 settings android vibration android-2.2-froyo

我正在制作一个振动切换小部件(事实上,它的第一个版本已经在市场上)但我在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);
Run Code Online (Sandbox Code Playgroud)

和相同,但VIBRATE_SETTING_ON在两条线上打开它,它的工作正常.

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

例如,如果我将它设置为"仅在静音模式下振动"并且通过我的小部件关闭振动,它会关闭,但是当我重新打开它时它会返回"仅在静音模式下"而不是"永远".事实上,没有办法将它设置回"Always",除非你通过Settings - > Sound进行,所以我猜振动模式的组合框正在做一些我不知道的事情.就像它将值存储在其他地方一样,因为即使我手动设置为"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);

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

mag*_*aio 9

当一些应用程序搞砸了我的Nexus One的个人设置时,我不得不自己搞乱这些设置.他们来了:

始终在戒指上振动:

setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ON);
Run Code Online (Sandbox Code Playgroud)

切勿在戒指上振动:

setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF);
Run Code Online (Sandbox Code Playgroud)

仅在静音时振铃:

setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ONLY_SILENT);
Run Code Online (Sandbox Code Playgroud)

始终振动通知:

setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_ON);
Run Code Online (Sandbox Code Playgroud)

永远不要振动通知:

setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_OFF);
Run Code Online (Sandbox Code Playgroud)

仅在静默时振动通知:

setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_ONLY_SILENT);
Run Code Online (Sandbox Code Playgroud)

改变铃声模式:

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

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