2014-09-04 4 views
1

Я знаю, мы можем использовать System.currentTimeMillis();, чтобы получить текущее время в Android.Проверить текущее время Android?

Но если я использую этот код, когда пользователь меняет свое время вручную, значение будет соответствующим образом изменено.

Помимо получения текущего времени API от бэкэнд (учитывая, что это будет низкий сигнал внезапно), нет ли какого-либо Android API, который я могу использовать для обнаружения изменений времени или реального текущего времени?

+0

если у него есть интернет. Вы можете получить время из Интернета. – Nepster

+0

Да, я знаю этот вариант. Но учитывая, что мое приложение используется только в одном месте, и я боюсь, что, поскольку слишком много людей там, сигнал или соединение с Интернетом будут плохими внезапными. – Rendy

+0

Вы не можете. Пользователь может изменить время на все, что захочет, и у вас нет никакого контроля над ним. Интернет-время, вероятно, единственный вариант, который вы контролируете _can_, особенно если время идет с вашего сервера, а не с стороннего. – ChuongPham

ответ

1

Нет ли Android-API, который я могу использовать для обнаружения изменений времени или реального времени?

No. С точки зрения операционной системы, то, что устанавливает пользователь время, чтобы быть является «реальное текущее время». Это устройство пользователя, а не ваше.

Вы можете рассмотреть что-то еще, чтобы быть «реальное текущее время», но любой такой источник времени будет находиться вне устройства, такие как GPS-сигналы, сервера времени SNTP и т.д.

+0

Хорошо. Я сдаюсь, чтобы получить время от SNTP. – Rendy

0

Вы можете попробовать SystemClock.uptimeMillis() или SystemClock.elapsedRealtime(), если вас не интересует фактическое время.

+0

Я до сих пор не могу думать о решении, которое я могу скомбинировать с upTimeMillis или elapsedRealTime. – Rendy

0

В теории вы могли бы сделать что-то из следующего:

  1. Record «реальное текущее время» в какой-то момент во время жизненного цикла приложения (при запуске, первое подключение к Интернету), и сравните время устройства и записать ваше дельта-время (разность во времени)

  2. Подключить к пользовательским изменениям даты/времени..сетей stackoverflow post: System datetime has changed event и обновить ваше новое дельта-время.

Кажется, относительно прямолинейно (теоретически). Таким образом, по крайней мере, если бэкэнд недоступен, вы можете положиться на это дельта-время.

+0

Да, я тоже думал об этом решении, но ACTION_TIME_CHANGED не очень надежный, как CommonsWare упоминается в другом сообщении. – Rendy

Смежные вопросы