Intereting Posts
Изменение курсора в CursorAdapter Оправьте текст в приложении Android с помощью WebView, но представив интерфейс TextView? AlertDialog с EditText, автоматически открывать мягкую клавиатуру с фокусом на EditText не работает Предупреждение о мертвом коде? Как мне обрабатывать намерение «share page» браузера в android? Автоматическое прикрепление источников во время импорта Как декодировать png-изображение, закодированное в Base64, и увидеть его в ImageView? Java – найти хост по MAC-адресу Затухание текста в Android с помощью AnimationUtils.loadAnimation Проверьте, присутствует ли приложение Twitter на устройстве пользователя. Как установить кнопку контроллера мультимедиа на панели уведомлений? Java.lang.AbstractMethodError, когда шпион LinkedList в Android Перемещайте предметы в полукруге, как бесконечный список Изменение ориентации экрана планшета – нет Просмотр найденного для id для фрагмента Как установить метод onClick с linearLayout?

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

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

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

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

Solutions Collecting From Web of "Как вы можете избежать эксплойтов в играх для 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(); 

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