Заставить пользователя изменить время в Android
Похоже, что Android не позволяет пользователю изменять системное время. Вместо этого я бы хотел, чтобы пользователь изменил время. Открыть настройки даты и времени легко:
startActivity(new Intent(android.provider.Settings.ACTION_DATE_SETTINGS));
Что я хотел бы знать, это:
- Можно ли связать напрямую с настройкой времени?
- Можно ли проверить, что пользователь правильно установил время? Я знаю о
TIME_CHANGED
широковещательное сообщение, но я не могу найти документацию по нему
Обновить:
Широковещательное сообщение TIME_CHANGED не предоставляет никакой информации о том, как оно изменилось. Это явно не задокументировано, но я пытался getData
а также getExtras
и не получил никакой информации. Кроме того, при просмотре остальной документации выясняется, что никакие данные или дополнительные материалы не передаются, если это явно не задокументировано. Точно так же это на самом деле задокументировано ACTION_DATE_SETTINGS
не требует ввода, и подразумевается, что он не требует никаких дополнительных затрат, поэтому нет способа контролировать его более точно.
CommonsWare указала на то, что должно было быть для меня очевидным - что простая проверка того, что пользователь установил время на значение, полученное с сервера, не беспокоясь о времени, потраченном в меню параметров, почти всегда будет работать. Поскольку это предположение могло бы быть на самом деле ложным, если бы я использовал этот метод, то я бы гарантировал, что в сообщении говорится, что время, вероятно, было установлено правильно или неправильно, а не с использованием определенного оператора.
Тем не менее, я обнаружил elapsedRealtime, и поэтому я на самом деле буду реализовывать это обнаружение должным образом.
3 ответа
Можно ли связать напрямую с настройкой времени?
Пытаться:
startActivity(new Intent(android.provider.Settings.ACTION_DATE_SETTINGS));
Можно ли проверить, что пользователь правильно установил время?
:: пожимаю плечами::
После того, как приложение снова получит контроль, проверьте время.
На случай, если кто-то захочет открыть из ADB
adb shell am start -a android.settings.DATE_SETTINGS
Я думаю, что цель вопроса просто противоречит философии дизайна andoid: если бы вы могли отправить пользователя непосредственно на часы, чтобы изменить время, это автоматически установило бы время, которое не будет автоматически устанавливаться устройством (или каким-либо сервером ntp), а Пользователь. Пользователь может не знать об этом и удивляться, почему часы никогда не корректируют себя автоматически, как раньше.
Если вы хотите быть уверены в том, сколько времени вам нужно для выполнения работы, и внедрить своего рода собственный сервер времени в приложении: получите время, используя запрос сервера времени в Интернете sntp, а затем запустите свой собственный точный таймер для подсчета секунд - я не думаю, что было бы реалистично получить намного лучше, чем 1 секунду. НЕ ИСПОЛЬЗУЙТЕ Thread.sleep(), это не точно в моих тестах. Я использую ScheduledExecutorService.scheduleAtFixedRate. Я провел только небольшое тестирование на двух устройствах, и оно оставалось в пределах 1 секунды в течение примерно 3 часов, когда я сказал, что достаточно хорошо. Также есть проблема, что все останавливается через некоторое время после перехода андроида в спящий режим.
Если вы уже получаете GPS-позиции, вы также можете использовать их время для исправления. Просто никогда не используйте первое, это может быть последняя известная позиция из памяти. Запомните время последнего исправления и используйте только для синхронизации, когда время нового исправления выше/новее.