Андроид как получить реальное время
Полный текст статьи и исходники программы доступны только зарегистрированным участникам сайта.
Прочитайте внимательно условия! В начале каждой статьи указывается, к какому курсу относится данная статья. Например, если статья из 4 курса, значит нужно заплатить за все курсы по четвёртый включительно.
Стоимость регистрации — символические 350 рублей. После регистрации у вас будет доступ ко второму курсу.
Для регистрации сначала необходимо пополнить ЮMoney(бывший Яндекс.Кошелек) 410011383280263 на указанную сумму (или Webmoney-кошелек P894989790291 (старый R390884954122) или QIWI (перевод по никнейму), а затем прислать письмо на адрес alexander.klimoff@gmail.com с указанием, на какой кошелёк вы делали оплату и реквизиты, по которым можно вас определить (не прикрепляйте к письму картинки или файлы). Учитывайте комиссию при переводах.
Не присылайте в письме мои номера кошельков — поверьте, я их знаю и без вас.
В ответном письме вы получите учётные данные для чтения статей из закрытой зоны за второй курс.
Доступ к третьему курсу обучения доступен только после оплаты второго курса и составляет 350 руб.
Доступ к четвёртому курсу обучения доступен после оплаты третьего курса и составляет 350 руб. и т.д.
При оплате сразу всех курсов одновременно (2-9) цена составит 2800 руб.
Доступ даётся как минимум на один год. Для тех, кто оплатил третий и другие курсы, сроки доступа увеличиваются.
Также возможен приём на PayPal (только для зарубежных пользователей). Обратите внимание, что в этом случае стоимость одного курса составляет 7$.
Источник
Проблемы времени и часовых поясов в Android и пути их решения
Предположим, вы уже давно используете Android, а потому может показаться, что он прекрасно справляется с задачами синхронизации времени – будильники срабатывают вовремя, каких-то явных отклонений времени не наблюдается и т. д. Однако уверены ли вы полностью в том, откуда Android на самом деле получает данные о точном времени и часовых поясах? Если у вас есть хоть какие-то сомнения о том, как это работает — добро пожаловать под кат.
В Android существует две проблемы со временем: это его непредсказуемая синхронизация и необходимость в актуализации данных о часовых поясах даже в самой свежей версии ОС.
Предыстория: Android является мобильной ОС, базирующейся на ядре Linux, он спокойно подключается к интернету и, конечно же, можно предположить, что синхронизация времени осуществляется с помощью NTP, однако, это не так. Исторически сложилось, что Android был предназначен для использования исключительно в мобильных телефонах (вспомните версию 1.6). При этом только к 3 мажорной версии он обзавёлся интерфейсом для планшетов и начали́сь другие подвижки к унификации интерфейса и начинки ОС. Однако даже версии 4.4 и Android L получают сигналы точного времени теми же методами, что их получала Nokia 3310 и другие, более ранние GSM/3GPP телефоны, т. е. от вышек сотовой связи при регистрации в сети (при подключении к вышке). При этом планшеты или другие устройства без модуля связи, в принципе не имеют возможности синхронизировать время автоматически.
К великому сожалению, чтобы научить Android синхронизировать время полностью автоматически с помощью NTP нам понадобиться root доступ ибо API для точной установки времени в Android ныне отсутствует.
Приступим. Первое, что необходимо сделать, это выключить синхронизацию времени с мобильной сетью. При этом установку часового пояса я рекомендую оставить в автоматическом режиме, а отключать её стоит, только если есть гарантия, что устройство будет работать в стационарном режиме.
Далее, необходимо установить приложение ClockSync, которое и будет выступать для нас альтернативой демону синхронизации времени с помощью NTP.
На скриншотах видно, что разница с точным временем оказалась достаточно маленькой, однако, бывают разные ситуации, у некоторых время на устройстве может даже плавать туда-сюда поскольку оператор не удосужился навести порядок у себя на БС.
Убедившись, что всё работает, настроим автоматическую синхронизацию в программе ClockSync. Для повышения точности я рекомендую включить опции «Режим высокой точности» и «Только через WI-FI». Если с первой опцией всё понятно из описания в программе (см. скриншот ниже), то вторую опцию я рекомендую включить в первую очередь не из соображений экономии мобильного трафика, а из-за того, что мобильный интернет не способен гарантировать хоть сколько-нибудь стабильные задержки.
Помимо этого я рекомендую включить опцию «При включении», чтобы лишний раз не выводить устройство из глубокого сна и тем самым сэкономить энергию.
В связи с масштабными изменениями часовых поясов в РФ осенью этого года необходимо уже сейчас задуматься об актуализации информации о них на всех устройствах и если с поддерживаемыми настольными ОС проблем не возникает, то в Android даже самая свежая версия ОС содержит устаревшие данные. Для того чтобы в этом убедиться устанавливаем TimeZone Fixer и наблюдаем неприглядную картину.
Автор программы TimeZone Fixer предупреждает нас, что обновление файлов данных о часовых поясах может полностью «сломать» устройство и даже даёт рекомендации о том как обезопасить себя от дополнительных проблем, хоть случаи проблем единичные и очень специфичные — это действительно хорошая забота о простых пользователях.
Только поэтому я и внёс этот кусочек в статью, он хоть и не имеет непосредственного отношения к проблеме, но это действительно хороший пример заботы о пользователях. В то же время предупреждение насчёт версий 4.3+ вызвано лишь малым количеством отзывов о программе для устройств с новыми версиями ОС, поэтому, пожалуйста, после использования обязательно напишите о́тзыв об этом приложении.
После обновления данных о часовых поясах программа предло́жит перезагрузится, однако, я рекомендую перезагрузить устройство самостоятельно через системное меню поскольку программа осуществляет перезагрузку фактически эквивалентную reset, что, пусть и с малой вероятностью, но может привести к проблемам и потери данных.
С удовольствием отвечу на любые вопросы или внесу дополнения, которые сообщество посчитает необходимыми, однако, хочется избежать перегруженности статьи дополнительной информацией, дабы придерживаться формата компактного руководства по решению конкретной проблемы.
UPD: Эта инструкция полностью решает проблему часовых поясов только для версий младше 4.4. С версии 4.4 нужен дополнительный патчинг, пока вопрос находится на стадии исследования возможностей для создания юзер-френдли решения.
Источник
Получить реальное время-не время установки устройства в android
Как узнать реальное географическое время, так как в моем приложении я хочу прикрепить Реальное время к моему приложению.
Так что если пользователь изменит время в своем устройстве, то я должен получить только реальное преобладающее время , а не время устройства
Мой вопрос сильно сбивает с толку но постарайтесь понять его простым языком —
Мне не нужно время устройства, мне нужно реальное преобладающее время в любой момент
2 ответа
Я заметил, что System.currentTimeMillis() время зависит от устройства. Если я изменю время на часах устройства, этот метод вернет другой ответ. Например: если Реальное время сейчас равно 10:00, и я меняю часы на своем устройстве на 9:30, то System.currentTimeMillis() вернет время 9:30 (в.
Я пытаюсь разработать приложение Android wear, но это становится настоящей головной болью. Время сборки-это не проблема, это скорость, с которой apk загружается и устанавливается на устройство. Каждый из них может занять до пары минут, а APK — это
Вам необходимо использовать протокол NTP (протокол сетевого времени) :
Вот код, который я нашел где-то еще. и я его использую. При этом используется библиотека Apache Commons, которая может быть установлена с помощью Gradle (добавление зависимости от commons-net:commons-net:3.6 )
Если вам нужен список серверов времени, проверьте: http://tf.nist.gov/service/time-servers.html
Вот код Java, который вы можете использовать:
Примечание. код Android должен выполняться в фоновом потоке и включать зависимость gradle:
Нет Android API, чтобы дать вам такое время. Пользователь всегда может изменить время устройства, и вы ничего не можете с этим поделать.
Лучше всего было бы запустить сервер с веб-сервисом, из которого вы можете получить время. Поскольку вы управляете сервером, вы можете попытаться убедиться, что он возвращает правильное время.
Похожие вопросы:
Мой случай таков: пользователь установил timezone на UTC+5 , например, а затем отключил время и синхронизацию timezone. Когда он идет к UTC+4 timezone, он просто возвращает время назад на час, не.
Я использую android.media.AudioRecord. /*initialize AudioRecord*/ long time = System.currentTimeMillis(); audioRecord.startRecording(); Когда я начинаю audioRecord с метода startRecording(), я хочу.
я работаю с Java и делаю игру. В этой игре Реальное время-очень существенная часть. По этой причине я пытаюсь получить реальное время с помощью Ntp. То, что я нашел в интернете, — это этот код.
Я заметил, что System.currentTimeMillis() время зависит от устройства. Если я изменю время на часах устройства, этот метод вернет другой ответ. Например: если Реальное время сейчас равно 10:00, и я.
Я пытаюсь разработать приложение Android wear, но это становится настоящей головной болью. Время сборки-это не проблема, это скорость, с которой apk загружается и устанавливается на устройство.
Привет на моей веб-странице, у меня есть 3 разных часа, сделанных flash. Все часы flash работают. Теперь мне нужно установить реальное время на все эти 3 часа. Есть ли у вас идея показать реальные.
Насколько я понимаю , now() возвращает одно и то же время в течение всей транзакции PostgreSQL? Но как получить реальное время? Кроме того, меня интересует, есть ли какой-либо параметр конфигурации.
Есть ли какой-нибудь способ получить реальное время в моем приложении? (Мы можем получить такое точное время только в интернете, поэтому мне нужен такой метод, который возвращает реальные часы из.
Я провожу тестирование производительности веб-приложения. Я хочу записать время загрузки или Время отклика браузера. В настольном браузере я буду использовать инструменты разработчика > сеть, чтобы.
Я столкнулся с проблемой, чтобы получить реальное время пользователя ‘trusted’, не позволяя ему мошенничать, если он изменит время своего компьютера. Погода я использую простой объект даты, или.
Источник
Ведение независимого времени на android девайсе
В один прекрасный день приходит ко мне менеждер и говорит: «Можем ли мы запретить пользователю менять время на телефоне?». И конечно же ответ мой был нет, но это не решало задачу. Необходимо было искать выход из ситуации.
Критерии для решения были следующими:
- должно работать без частых синхронизаций с сервером, например, достаточно взять время раз в месяц.
- должно быть устойчиво к переводу времени назад/вперед/смене часового пояса
- работать при перезагрузке устройства/неожиданном завершении/ вытаскивании батареи
- не отклоняться от эталонного времени на слишком большие значения, в моем случае было 5 минут.
- если все же удалось обмануть, то отслеживать этот момент
Мы сели, подумали, и нашелся другой приемлемый вариант — вести свое с блэкджеком и . независимое от девайса время.
Итак, начнем.
Для начала создадим класс, который будет отвечать за хранение времени. В качестве места я выбрал SharedPreferences.
Т.к. тут делаются банальные вещи, то спрячу в спойлер, чтобы не мозолило глаза.
Далее будет класс, который предоставляет основное api. Он сохранит и отдаст время, сам запустит таймер, который будет обновлять время.
Тоже все довольно обыденно. Единственное, что тут интересно: при установке серверного времени мы должны сначала остановить таймер, сохранить новое серверное время, а затем вновь запустить.
Перейдем к интересному. Вся основная логика пришлась на ресивер.
Ресивер подписан на три события: стартовать при загрузке, стартовать при выключении, стартовать при обновление времени.
Что должно происходить при обновлении времени — ясно, должно инкрементиться время.
Значение для TIME_PERIOD было выбрано 30 секунд. И нет, это не влияет на батарею. Приложение, в котором это работает, всегда установлено на моем устройстве, и все клёво.
Следующий шаг — запоминать системное время, чтобы мы могли знать примерное время, которое устройство было выключено.
И, наконец, самое важное — вычисление времени, которое девайс находился в выключенном состоянии.
Сначала получим последнее сохраненное время системы
и вычислим время в выключенном состоянии
если оно меньше или равно нулю, значит, мы наткнулись на перевод времени назад. Перевод вперед нас не особо интересовал, да и отследить его весьма трудно.
добавляем его к текущему и запускаем таймер
Вот и все. Готово.
Не забываем про добавление разрешения в манифест
Итогом стала работающая система ведения времени на устройстве. Да, она не идеальна, но поставленную задачу решает хорошо.
Источник
Как узнать текущее время и дату в Android
Как узнать текущее время и дату в приложении для Android?
Вы можете использовать:
В календаре достаточно констант для всего, что вам нужно.
Вы можете ( но больше не должны — смотрите ниже!) Использовать android.text.format.Time :
Из ссылки, указанной выше:
Класс Time — более быстрая замена для классов java.util.Calendar и java.util.GregorianCalendar. Экземпляр класса Time представляет момент времени, указанный с точностью до секунды.
ПРИМЕЧАНИЕ 1. Прошло несколько лет с тех пор, как я написал этот ответ, и речь идет о старом, специфичном для Android, и теперь устаревшем классе. Google теперь говорит, что «[t] его класс имеет ряд проблем, и рекомендуется использовать GregorianCalendar вместо этого».
ПРИМЕЧАНИЕ 2. Несмотря на то, что у Time класса есть toMillis(ignoreDaylightSavings) метод, это просто удобство для перехода к методам, которые ожидают время в миллисекундах. Значение времени с точностью до одной секунды ; доля в миллисекундах всегда 000 . Если в цикле вы делаете
Результирующая последовательность будет повторять одно и то же значение, например 1410543204000 , до тех пор, пока 1410543205000 не начнется следующая секунда, после чего начнется повторение.
Если вы хотите получить дату и время по определенному шаблону, вы можете использовать следующее:
Дата :
Время:
Для тех, кто предпочитает индивидуальный формат, вы можете использовать:
Принимая во внимание, что вы можете иметь шаблоны DateFormat, такие как:
На самом деле, безопаснее установить текущий часовой пояс, установленный на устройстве, с помощью Time.getCurrentTimezone() , иначе вы получите текущее время в UTC.
Затем вы можете получить все нужные поля даты, например:
ОБНОВИТЬ
Как отмечают многие, Google говорит, что у этого класса есть ряд проблем, и его больше нельзя использовать:
Этот класс имеет ряд проблем, поэтому рекомендуется использовать GregorianCalendar.
По историческим причинам при выполнении временных вычислений вся арифметика в настоящее время выполняется с использованием 32-разрядных целых чисел. Это ограничивает достоверный диапазон времени, представляемый с 1902 до 2037 года. Подробности смотрите в статье в Википедии о проблеме 2038 года. Не полагайтесь на это поведение; это может измениться в будущем. Вызов switchTimezone (String) в дату, которая не может существовать, например, в настенное время, которое было пропущено из-за перехода на летнее время, приведет к дате в 1969 году (т.е. -1 или 1 секунда до 1 января 1970 года по Гринвичу). Большая часть форматирования / синтаксического анализа предполагает использование текста ASCII и поэтому не подходит для использования со сценариями, не относящимися к ASCII.
Источник