android 陀螺仪简单的使用

参考这篇博文

android 传感器使用与开发---陀螺仪传感器

没啥好说的,就是把陀螺仪的偏移量给计算出来拿来用

 

public class MainActivity extends AppCompatActivity {
    
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
        mSensorManager.registerListener(mSensorEventListener, mSensor, SensorManager.SENSOR_DELAY_GAME);
    }

    private SensorManager mSensorManager;
    private Sensor mSensor;
    

    @Override
    protected void onResume() {
        super.onResume();
        mSensorManager.registerListener(mSensorEventListener, mSensor, SensorManager.SENSOR_DELAY_GAME);
    }

    @Override
    protected void onPause() {
        super.onPause();
        mSensorManager.unregisterListener(mSensorEventListener);
    }

    private float timestamp = 0;
    private float angle[] = new float[3];
    private static final float NS2S = 1.0f / 1000000000.0f;
    private float gx = 0,gy = 0,gz = 0;
    private SensorEventListener mSensorEventListener = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent sensorEvent) {
            if (sensorEvent.accuracy != 0) {
                int type = sensorEvent.sensor.getType();
                switch (type) {
                    case Sensor.TYPE_GYROSCOPE:
                        if (timestamp != 0) {
                            final float dT = (sensorEvent.timestamp - timestamp) * NS2S;
                            angle[0] += sensorEvent.values[0] * dT;
                            angle[1] += sensorEvent.values[1] * dT;
                            angle[2] += sensorEvent.values[2] * dT;

                            float anglex = (float) Math.toDegrees(angle[0]);
                            float angley = (float) Math.toDegrees(angle[1]);
                            float anglez = (float) Math.toDegrees(angle[2]);
                            
                            if(gx != 0){
                                float c = gx - anglex;
                                if(Math.abs(c) >= 0.5 ){
                                    Log.d("================", "anglex------------>" + (gx - anglex));
                                    gx = anglex;
                                }

                            }else{
                                gx = anglex;
                            }
                            if(gy != 0){
                                float c = gy - angley;
                                if(Math.abs(c) >= 0.5 ){
                                    Log.d("================", "anglex------------>" + (gy - angley));
                                    gy = angley;
                                }
                            }else{
                                gy = angley;
                            }
//                            if(gz != 0){
//                                Log.d("================", "anglex------------>" + (gz - anglez));
//                            }
                            

                            gz = anglez;

                        }
                        timestamp = sensorEvent.timestamp;
                        break;
                }
            }
        }

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

        }
    };

}

 

z轴的话把手机放平了然后旋转手机就会有很大的数值变化了

 

 

 

 

 

 

 

你可能感兴趣的:(android)