我正在制作一个振动切换小部件(实际上,它的第一个版本已经在Market中了),但是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引入了“仅在静音模式下振动”和“在非静音模式下振动”,因此我不知道如何使其工作。当“振动”设置为“始终”或“从不”时,没有问题,但是只要用户手动将其设置为其他两个设置之一,应用程序就会开始执行奇怪的操作。

例如,如果我将其设置为“仅在静音模式下振动”,并且通过小部件关闭了振动,则会将其关闭,但是当我重新打开它时……它又回到“仅在静音模式下” “始终”。实际上,除非您通过“设置”->“声音”将其设置为“始终”,否则无法将其设置为“始终”,因此我想振动模式的组合框正在执行我不知道的其他操作。就像它将值存储在其他位置一样,因为即使我手动将其设置为“ 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);
进入设置菜单->“振动”设置为“仅在静音模式下”

最佳答案

当某些应用程序弄乱了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);

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

关于android - 在Android 2.2上震动设定,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3742323/

10-10 19:50