Android получает фактическое время (когда интернет отключен и время устройства неверно)

Согласно заявленному вопросу, мне нужно фактическое время. Например, в моем приложении я должен показать конкретное всплывающее окно всем пользователям в 8 утра по национальному времени. Приложение работает в определенной стране. Что делать, если время устройства неверно? Я могу получить время через API. Что делать, если устройство не имеет интеренет? Я думал о том, чтобы начать отслеживать время, когда у меня появился интернет. Например, если у меня есть интернет, я нажимаю API, чтобы получить время и сохранить это время, чтобы отслеживать его. Любой другой sloution?


person Nouman Ghaffar    schedule 14.09.2017    source источник
comment
Я не думаю, что есть какое-то решение этой ситуации. Также в этом случае не только ваше, но и каждое приложение, зависящее от времени, не будет работать должным образом.   -  person Vivek Mishra    schedule 14.09.2017
comment
ты действительно хочешь использовать магию за пределами Хогвартса? Вы не боитесь дементоров? Из какого источника вы хотите получить время? по какому каналу? Вы не можете просто получить точное время волшебным образом.   -  person Vladyslav Matviienko    schedule 14.09.2017
comment
@ВладМатвиенко хахаха. Тестовый ответ будет получить время GPS, получить время от sime, отслеживать время после определенного интервала. Я искал программиста с логичным ответом. Но, к счастью, я нашел здесь поклонника Гарри Поттера.   -  person Nouman Ghaffar    schedule 14.09.2017
comment
Это был мой способ сказать, что вы должны более правильно определить свои требования.   -  person Vladyslav Matviienko    schedule 14.09.2017


Ответы (3)


Как насчет этого решения: GPS-время в Android?

Однако для этого потребуется GPS-приемник.

person Tjaart    schedule 14.09.2017

Вы не можете получить реальную метку времени, если время, установленное на устройстве, неверно.

Редактировать: - Есть только решение, которое я мог найти с помощью телефонного интернета: -

Вы можете дать время от времени публичного сервера. не забудьте добавить разрешение INTERNET в манифест.

String TIME_SERVER = "url"; 
NTPUDPClient timeClient = new NTPUDPClient(); 
InetAddress inetAddres=InetAddres.getByName(TIME_SERVER);
TimeInfo timeInfo = timeClient.getTime(inetAddress);
long returnTime = timeInfo.getMessage().getTransmitTimeStamp().getTime(); 
Date time = new Date(returnTime);
person Shivam Sharma    schedule 14.09.2017

Вам нужно будет использовать UTC. Если вам действительно это нужно, я бы попросил приложение вести учет времени в формате UTC в момент установки (вы знаете, что в это время у пользователя есть Интернет, поэтому вы можете воспользоваться этим), а затем приложение отслеживает этого UTC внутри страны.

Вы можете добавить секунды к UTC, когда они проходят, пока приложение открыто, а затем локализовать это время тривиально. Затем вы можете использовать время устройства, чтобы узнать, сколько времени прошло с момента последнего открытия приложения (вам нужно будет создавать временную метку каждый раз, когда приложение закрывается и открывается), преобразовать это время в секунды и добавить его в свои сохраненные приложения. УНИВЕРСАЛЬНОЕ ГЛОБАЛЬНОЕ ВРЕМЯ. Опять же, локализация этого времени — тривиальность. Я бы также проверял, есть ли у пользователя Интернет в любое время, когда он открывает приложение, и если у него есть Интернет, получайте правильный UTC и обновляйте свои внутренние обновления UTC.

Если вы можете получить разрешение на бесшумную работу и подсчет секунд в фоновом режиме, это станет еще проще, и вы сможете отправлять уведомления в режиме реального времени. Это не идеально, но я уверен, что это может сработать.

person Robbie Milejczak    schedule 14.09.2017
comment
Идея получить первоначальную запись времени, а затем использовать интервал локальной петли для ее самостоятельного подсчета, кажется приемлемой, держу пари, что есть проблемы. Во-первых, если я загружу приложение, отключу интернет, запущу приложение - сейчас нет возможности получить эту первоначальную запись времени. Во-вторых, если нет интернета, мы не можем использовать время устройств, потому что оно может быть неправильным (предположим, что оно всегда неправильное). - person Starwave; 02.07.2020
comment
Решение с моей точки зрения - если цель приложения - делать что-то в определенное время И требуется аутентификация пользователя, ТОГДА у нас будет 100% интернет в момент входа в систему, так что таким образом мы решили 1-ю проблему, теперь у нас есть начальное правильное время запись из интернета. Что касается второй проблемы, то можно создать фоновую службу, которая всегда будет активна, и ее единственная работа будет подсчитывать секунды в интервале (postDelayed или другой метод), который будет работать. Однако создание целой фоновой службы, даже небольшой, — тяжелая вещь, не хочу идти по этому пути. - person Starwave; 02.07.2020