Мое приложение зависит от времени, и я не хочу, чтобы изменение даты и времени устройства влияло на мое приложение, например, если пользователь намеренно установил дату устройства на любую предыдущую дату. Есть ли способ получить текущую дату и время, когда пользователь подключен к мобильной сети или Wi-Fi? Я не хочу использовать GPS.
Как получить независимую от устройства локальную дату и время Android
Ответы (2)
Javadoc класса SystemClock описывает различные способы подсчета прошедшего времени для различных сценариев. и условия.
В вашем случае вы должны использовать
long time = SystemClock.elapsedRealtime();
Вернуть время с момента загрузки системы и включить глубокий сон. Эти часы гарантированно будут монотонными и продолжают тикать, даже когда ЦП находится в режимах энергосбережения, что является рекомендуемой основой для интервальной синхронизации общего назначения.
Вызовите его в первый раз, когда захотите начать отслеживать использование сети (полагаю, вы уже знаете, как это сделать) и сохраните это значение.
Когда вы получаете событие о том, что пользователь больше не использует сеть, снова вызовите тот же метод и посчитайте затраченное время.
long elapsed = time - SystemClock.elapsedRealtime();
Затем вы можете преобразовать миллисекунды в строку, например, так:
String formattedElapsedTime = DateUtils.formatElapsedTime(elapsed/1000);//note that this method takes second as arguments so we have to divide it by 1000
Вы должны вызвать веб-сервис и получить текущую дату и время сервера. Тогда сервер будет отвечать за фактическую дату/время. Лучший способ — создать свой собственный веб-сервис, потому что он дает вам больше контроля, чем использование стороннего.