Android – Как подсчитать время в течение длительного периода

В моем приложении я хочу измерить время, в течение которого акселерометр находится в состоянии покоя.

Например, если я устанавливаю порог 0,4 м / с, а скорость акселерометра всегда ниже, чем это означает, что телефон находится в состоянии покоя (порог должен учитывать джиттер в значениях).

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

У меня уже есть акселерометр, работающий нормально, мне просто нужно посчитать это время, и я не знаком с тем, как это сделать, может ли кто-нибудь помочь мне здесь? заранее спасибо

Решение:

start = System.currentTimeMillis(); if (vectorTotal > 10.1 || vectorTotal < 9.5){ timelimit = (System.currentTimeMillis()+ 10000); } else if (start >= timelimit){ checkUser(); timelimit = (System.currentTimeMillis()+ 10000); } 

Является ли ваше приложение на переднем плане?

В начале:

 long start = System.currentTimeMillis(); 

Сохраните это значение в базе данных или при необходимости, если необходимо.

В конце:

 long end = System.currentTimeMillis(); 

Затем:

 long passedTime = end - start; 

Вы можете установить будильник каждый раз, когда вы превысите порог, и когда тревога, наконец, срабатывает, вы делаете все, что хотите.

Сделайте что-то подобное, когда вы начнете свою деятельность:

 am = (AlarmManager) getSystemService(ALARM_SERVICE); timeoutInMillis = 60000; Intent timeoutIntent = <create the intent you want to run here>; timeoutPendingIntent = PendingIntent.getService(this, 0, timeoutIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

А затем каждый раз, когда акселерометр находится выше вашего порога:

 am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timeoutInMillis, timeoutPendingIntent ); 

Не забудьте очистить будильник, когда вы выходите из своей деятельности:

 am.cancel(timeoutPendingIntent); 

Я думаю, что вы, вероятно, смотрите на двойное решение Service / Activity, в котором служба работает в фоновом режиме, подсчитывая все, что вы хотите подсчитать, и предоставляя эту информацию Activity, когда она ее запрашивает.

Что касается времени подсчета, это просто манипулирование возвратом из System.currentTimeMillis() как указывает DKIT Android.

Вы можете использовать

  • Сервис для прослушивания акселерометра. Как читать данные акселерометра в службе с Android
  • AlarmManager для вызова вашего обработчика через определенное время. http://developer.android.com/reference/android/app/AlarmManager.html

В сервисе вы слушаете события с акселерометра, на каждом событии вы отменяете предыдущий будильник и устанавливаете новый. По достижении определенного количества времени вы получите намерение от тревоги.

Intereting Posts
Идентификация Android для учетных записей google включена в Google App Engine Android apk – Как исключить файл .so из сторонней зависимости с помощью gradle КоординаторLayout игнорирует поля для просмотров с привязкой Отключение AutoHideSplashScreen для Android не работает Как изменить элемент в spinner в ActionBar программно Как скомпилировать библиотеку с исходным кодом с помощью инструментов NDK? Создание состояния клиент-серверной архитектуры в WCF Как производительность эмулятора Android сравнима с реальной производительностью устройства? Выполнение Android не выполнено для приложения задачи: proguardRelease Выполнение плагинов не распространяется на ошибку конфигурации жизненного цикла Сохранить значение выбранного элемента, используя общие предпочтения HashMap с байтовым массивом и значением String – containsKey () не работает Центр визирования большого пальца не в начальной точке Внедрение Gradle vs API Запустить Android SDK manager – Каталог инструментов не существует? макинтош