2014-10-17 28 views
0

我寫了一個簡單的android代碼,它監聽加速度和方向傳感器,並將加速度x,y,z值和天使寫入北部。android傳感器偵聽器之間的間隔

在應用程序中我試圖設置發送傳感器事件onSensorChanged()函數之間有30秒的間隔,但它仍然在更新了幾次每秒。

這是代碼:

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不承諾你什麼。例如,如果其他人對加速度傳感器進行採樣(例如,屏幕旋轉),您將根據「快速請求」 – AsfK 2015-12-17 08:13:09

回答

0

不能設置傳感器利率自定義間隔。可能的最低速率是SENSOR_DELAY_UI,每秒的採樣取決於設備。 您將需要爲您節省打印的值是最後一次來過濾這些值,然後等到那個時間和當前時間之間的差超過30秒,然後重新打印。

相關問題