Постоянно следить за сенсором в Android - PullRequest
6 голосов
/ 20 января 2011

Я пытаюсь найти наилучший способ контроля датчика акселерометра с частотой опроса менее 0,25 миллисекунды. Я реализовал опцию пользовательского интерфейса, чтобы пользователь мог переключаться в постоянное состояние мониторинга и прояснил последствия разряда батареи. Будет ли удаленный сервис лучшим способом работы с потоком демона из-за того, как Android выполняет очистку памяти и потоков? Суть в том, чтобы контролировать акселерометр как можно ближе к постоянному, чтобы черта разряжалась. И этот мониторинг должен быть продолжительным, может быть, даже более 24 часов подряд, опять же, я понимаю последствия энергопотребления. Будут оценены любые предложенные чтения или фрагменты кода.

Просто новичок ищет советы от мудрости сообщества Android. Заранее спасибо,

-Стив

УТОЧНЕНИЕ: я пытаюсь определить момент, когда происходит изменение ускорения. Мой код различается по оси, но моей целью является получение данных от акселерометра в реальном времени.

Ответы [ 2 ]

2 голосов
/ 21 января 2011

Мы сделали это с помощью Android Службы - они могут быть запущены из действия, но работать в фоновом режиме. Это, наверное, то, что вы ищете!
Некоторые Howtos:

  1. http://developerlife.com/tutorials/?p=356
  2. http://developer.android.com/guide/topics/fundamentals.html#procthread
1 голос
/ 21 января 2011

Использование определенного потока для мониторинга и ожидания - лучшее решение, обеспечивающее гибкость периода ожидания. Это довольно эффективно, так как не требует какого-либо специального обслуживания.

class MonitorThread extends Thread {
    ...
    public void run() {
        for (;;) {
            long ms = 0;
            int nanos = 250000;
            ... // Do something or compute next delay to wait
            try {
                Thread.sleep(ms, nanos);
            } catch (InterruptedException ex) {
            }
        }
    }
}

См. http://developer.android.com/reference/java/lang/Thread.html

Вы указываете очень короткую задержку (0,250 мс), поэтому она будет загружать процессор. Вероятно, вы можете использовать результат акселерометра, чтобы увеличить или уменьшить эту задержку. Например, если вы обнаружите, что ускорение отсутствует, увеличьте задержку Вам, но 100 мс кажется разумным или даже выше). Как только вы обнаружите что-то, уменьшите задержка. Все это зависит от вашей заявки.

...