原帖地址: http://www.androidegg.com/portal.php?mod=view&aid=636
1.4.3 瞬间加速度值的取得 例如类似计步器、作用力测定的应用开发的时候,很想检测出加速度急剧的变化。这个时候,和Low-Pass Filter处理相反,去掉短周波的影响,这样可以取得数据。像这种去掉短周波的影响的过滤器叫做High-pass filter。 High-pass filter的处理方法,如下面的例程列表1-5 代码所示: 列表1-5 瞬间加速度值的取得 package androidegg.stu.sensor; import java.util.Arrays; import java.util.List; import android.app.Activity; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.widget.TextView; public class AndroidEggSensorGetValueActivity extends Activity implements SensorEventListener{ /** Called when the activity is first created. */ private SensorManager sensorManager; // private final float FILTERING_VALAUE = 0.1f; private float lowX,lowY,lowZ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //SensorManager sensorManager = (SensorManager)this.getSystemService(SENSOR_SERVICE); setContentView(R.layout.main); } @Override protected void onResume(){ super.onResume(); List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL); //sensor1 for (Sensor s : sensors){ sensorManager.registerListener(this,s,SensorManager.SENSOR_DELAY_NORMAL); } } // @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // TODO Auto-generated method stub } @Override public void onSensorChanged(SensorEvent e) { float x = e.values[sensorManager.DATA_X]; float y = e.values[sensorManager.DATA_Y]; float z = e.values[sensorManager.DATA_Z]; //Low-Pass Filter lowX = x * FILTERING_VALAUE + lowX * (1.0f - FILTERING_VALAUE); lowY = y * FILTERING_VALAUE + lowY * (1.0f - FILTERING_VALAUE); lowZ = z * FILTERING_VALAUE + lowZ * (1.0f - FILTERING_VALAUE); //High-pass filter float highX = x - lowX; float highY = y - lowY; float highZ = z - lowZ; //output TextView textX = (TextView)findViewById(R.id.x); textX.setText("x:" + String.valueOf(highX)); TextView textY = (TextView)findViewById(R.id.y); textY.setText("y:" + String.valueOf(highY)); TextView textZ = (TextView)findViewById(R.id.z); textZ.setText("Z:" + String.valueOf(highZ)); } // @Override protected void onStop(){ super.onStop(); sensorManager.unregisterListener(this); } } 运行结果如图1-5-2 |