Android - Как считать время за длительный период - PullRequest
6 голосов
/ 08 февраля 2011

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

Например, если я установил порог в 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);
    }

Ответы [ 4 ]

6 голосов
/ 08 февраля 2011

Ваше приложение на переднем плане?

При запуске:

long start = System.currentTimeMillis();

При необходимости сохраните это значение в базе данных или в настройках.

В конце:

long end = System.currentTimeMillis();

Тогда:

long passedTime = end - start;
1 голос
/ 08 февраля 2011

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

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

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);
0 голосов
/ 08 февраля 2011

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

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

0 голосов
/ 08 февраля 2011

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

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

...