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