Делаю виджет переключения вибрации (на самом деле его первая версия уже есть в Маркете) но у меня какие-то проблемы с настройками вибрации Андроида 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);
- Заходим в меню настроек -> Вибрация установлена на "Только в беззвучном режиме"