2014-10-17 2 views
0

Я написал простой код для Android, который прослушивает датчики ускорения и ориентации и записывает значения ускорения x, y, z и ангела с севера.андроидный интервал между датчиками-слушателями

В приложении Я пытаюсь установить интервал 30 секунд между отправкой датчиков на функцию onSensorChanged(), но он все еще обновляется несколько раз в секунду.

это код:

package com.example.sensors; 

import java.util.List; 

import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 
import android.app.Activity; 
import android.hardware.Sensor; 
import android.hardware.SensorEvent; 

public class MainActivity extends Activity implements SensorEventListener{ 

    private SensorManager sensorManager; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      sensorManager = (SensorManager)this.getSystemService(SENSOR_SERVICE); 
    } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      // Inflate the menu; this adds items to the action bar if it is present. 
      getMenuInflater().inflate(R.menu.main, menu); 
      return true; 
     } 

     @Override 
     public void onSensorChanged(SensorEvent event) { 
      if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) // 
      { 
       float x = event.values[0]; 
       float y = event.values[1]; 
       float z = event.values[2]; 
       Log.i("acceleration:", "x, y, z" + " " + x + " " + y + " " + z + " "); 
      }    
      else if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) //@deprecated. use TYPE_MAGNETIC_FIELD 
      { 
       Log.i("orentation: " , "north:" + event.values[0]); 
      } 
     } 

     @Override 
     public void onAccuracyChanged(Sensor sensor, int accuracy) { 

     } 

     @Override 
     protected void onResume() { 
      super.onResume(); 
      // register this class as a listener for the accelerometer sensors and orientation 
      sensorManager.registerListener(this, 
       sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),//This method get the default sensor for a given type 
       30000000);//SensorManager.SENSOR_DELAY_NORMAL 
      sensorManager.registerListener(this, 
        sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),//This method get the default sensor for a given type 
        30000000); 
     } 

     @Override 
     protected void onPause() { 
      // unregister listener 
      super.onPause(); 
      sensorManager.unregisterListener(this); 
     } 

} 
+0

Похоже, вы хорошо себя чувствуете, но знайте, что Android не обещает вам ничего. например, если кто-то еще проверит датчик Acceleromater (например, поворот экрана), вы получите события в соответствии с «быстрым запросом», – AsfK

ответ

0

Вы не можете установить пользовательский интервал скоростей датчиков. Самая медленная скорость - SENSOR_DELAY_UI, а выборки в секунду зависят от устройства. Вам необходимо будет отфильтровать эти значения, сохранив последний раз, когда вы напечатали значения, а затем подождите, пока разница между этим временем и текущим временем не превысит 30 секунд, и снова напечатайте.

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