Intereting Posts
Разрешить внешнее касание для DialogFragment Как программно завершить приложение Android NDK (native activity)? Обратная совместимость VectorDrawable и установка библиотек неофициальной поддержки Не удается удалить контакты с SIM-карты. Никаких ограничений грамматики (DTD или XML-схемы), обнаруженных для документа (Android) Передача данных между iOS и Android через Bluetooth? DoInBackground вызов AsyncTask затем спит блоки UI Thread Приложение выходит на кнопку возврата назад внутри фрагментов в навигационном ящике Набор математических функций в LaTeX для рендеринга в приложении Android Получить прогресс в onStopTrackingTouch не onProgressChanged в файле поиска Android: Почему длинный клик также вызывает обычный щелчок? Невозможно использовать желтый цвет с маленьким значком уведомлений Android Nougat Запуск службы при загрузке и после установки приложения Scolling с несколькими RecyclerViews в макете Android нарисовать горизонтальную линию между видами

Как вы можете избежать эксплойтов в играх для Android?

Мне нужно измерить период времени, который может длиться до нескольких часов. Я предполагаю, что обычный способ сделать это будет примерно таким:

Date date = new Date(); ...wait some time... (new Date()).getTime() - date.getTime()) 

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

new Date() использует System.currentTimeMillis() которая зависит от часов ОС – и может быть изменена, когда пользователь изменяет системную дату и время.

Вы должны использовать System.nanoTime() , который имеет следующие свойства:

 /** * Returns the current value of the most precise available system * timer, in nanoseconds. * * <p>This method can only be used to measure elapsed time and is * not related to any other notion of system or wall-clock time. * The value returned represents nanoseconds since some fixed but * arbitrary time (perhaps in the future, so values may be * negative). This method provides nanosecond precision, but not * necessarily nanosecond accuracy. No guarantees are made about * how frequently values change. Differences in successive calls * that span greater than approximately 292 years (2<sup>63</sup> * nanoseconds) will not accurately compute elapsed time due to * numerical overflow. * * <p> For example, to measure how long some code takes to execute: * <pre> * long startTime = System.nanoTime(); * // ... the code being measured ... * long estimatedTime = System.nanoTime() - startTime; * </pre> * * @return The current value of the system timer, in nanoseconds. * @since 1.5 */ public static native long nanoTime(); 

Это нельзя манипулировать, просто изменив системную дату.