2013-06-04 4 views
1

У меня есть требование, когда значения датчика изменены, необходимо отобразить некоторые данные соответственно.Проблема с методом OnSensorChanged()

В настоящее время я выполняю, если есть изменение 10 градусов для текущего значения азимута и предыдущего значения азимута, затем выполните некоторые действия.

Проблема заключается в том, что каждые 10 градусов меняются (как я упоминал в коде), действие выполняется. Я не хочу, чтобы это действие выполнялось каждые 10 градусов. всякий раз, когда устройство останавливается вращением, следует учитывать азимутальное значение и действие должно выполняться. Я также использовал счетчик. Но бесполезно. Это убивает меня.

Вот мой код,

public void onSensorChanged(SensorEvent paramAnonymousSensorEvent) { 

     CameraSearch.this.azimuth = paramAnonymousSensorEvent.values[0]; 

     CountDownTimer myCountDown = new CountDownTimer(2000, 1000) { 
      public void onTick(long millisUntilFinished) { 
       // update the UI with the new count 
      } 

      public void onFinish() { 
       Log.d("","Counter finished"); 
       if (Math.abs(CameraSearch.this.azimuth - previousAzimuth) >= 10) { 

        Log.d("", "Azimuth: " + CameraSearch.this.azimuth 
          + "PreviousAzimuth: " + previousAzimuth); 
        CameraSearch.this.findScreenOrientation(); 
        previousAzimuth = CameraSearch.this.azimuth; 
       } 
      } 
     }; 
     // start the countDown 
     myCountDown.start(); 

    } 
}; 

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

Спасибо заранее!

ответ

0

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

https://en.wikipedia.org/wiki/Standard_deviation#Rapid_calculation_methods

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

+0

@ chochop, спасибо, что ответили !! Это мне непонятно. Есть ли какая-либо другая методология, хотя идеи достаточно. Я не могу реализовать эти алгоритмы, нужно учитывать фактор времени. – Mahe

+0

@ Махе, как я уже сказал, я не могу придумать более простого решения. Если вы недовольны попыткой реализовать свой ответ, просто подождите, пока другой человек ответит – chopchop

Смежные вопросы