Android如何获得手机直线加速度

利用加速度传感器获得手机坐标系中的直线加速度是没有经过处理的

处理后的方法,根据谷歌文档中的算法

package com.example.sensor2;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;

public class SensorActivity extends Activity {
	//1.声明sensormanager对象 管理传感器
	private SensorManager sensorManager;
	private float gravity[] = new float[3];
	private float linear_acceleration[] = new float[3];
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sensor);
       //2.得到sensorManager对象
        sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
        //3.得到加速度传感器
        Sensor accelmeterSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        //4.给加速度传感器注册
        sensorManager.registerListener(new SensorEventListener() {
			
			public void onSensorChanged(SensorEvent event) {
				// TODO Auto-generated method stub
//				System.out.println("x方向"+event.values[0]);
//				System.out.println("y方向"+event.values[1]);
//				System.out.println("z方向"+event.values[2]);
				
				final float alpha = 0.8f; 
				
				gravity[0]=alpha*gravity[0]+(1-alpha)*event.values[0];
				gravity[1]=alpha*gravity[0]+(1-alpha)*event.values[1];
				gravity[2]=alpha*gravity[0]+(1-alpha)*event.values[2];
				
				linear_acceleration[0]=event.values[0];
				linear_acceleration[1]=event.values[1];
				linear_acceleration[2]=event.values[2];
				
				System.out.println("X方向的直线加速的"+linear_acceleration[0]);
				System.out.println("y方向的直线加速的"+linear_acceleration[1]);
				System.out.println("z方向的直线加速的"+linear_acceleration[2]);
			
				
			}
			
			public void onAccuracyChanged(Sensor arg0, int arg1) {
				// TODO Auto-generated method stub
				
			}
		}, accelmeterSensor, SensorManager.SENSOR_DELAY_NORMAL);
        
    }

   
}

  system.out出来的就是最终的数据了。

final float alpha = 0.8f; 
                
                gravity[0]=alpha*gravity[0]+(1-alpha)*event.values[0];
                gravity[1]=alpha*gravity[0]+(1-alpha)*event.values[1];
                gravity[2]=alpha*gravity[0]+(1-alpha)*event.values[2];
                
                linear_acceleration[0]=event.values[0];
                linear_acceleration[1]=event.values[1];
                linear_acceleration[2]=event.values[2];

这一大堆是在视频教程里学来的,据说是谷歌文档给出的算法。具体的我也不懂,自己会用就好了。祝福大家开心。

posted @ 2012-09-12 13:31  码农王炸  阅读(628)  评论(0)    收藏  举报