9

我有一个实现的类,SensorEventListener我想tilt Angle使用Accelerometer.

我在互联网上寻找示例,但他们使用 Sensor.TYPE_MAGNETIC_FIELD.

我相信我的设备没有这个传感器,因为当我进行以下检查
manager.getSensorList(Sensor.TYPE_ACCELEROMETER).size()时,我得到

有没有办法tilt Angle只使用 Sensor.TYPE_ACCELEROMETER值来获得?

4

3 回答 3

3

正如人们建议的那样,您可以使用加速度计和磁传感器来执行此操作。

这是一个包含完整解决方案的博客文章。

http://www.ahotbrew.com/how-to-detect-forward-and-backward-tilt/

于 2015-03-22T11:08:33.757 回答
1

您可以使用加速度计获得倾斜读数。如果你设置一个加速度计,你会注意到它包括重力。因此,如果您的手机正面朝上放在桌子上,z 轴将记录在接近 9.81(重力)的某个位置,x 和 y 轴将为 0。当您倾斜手机时,重力将被投射在 x 和/或 y 轴上。因此,您的 x 和 y 值将告诉您手机的倾斜度。

于 2014-02-09T22:20:07.320 回答
1

尝试这个,

SensorManager sensorManager = (SensorManager) this.getSystemService(SENSOR_SERVICE);        

        final SensorEventListener mEventListener = new SensorEventListener() {
            public void onAccuracyChanged(Sensor sensor, int accuracy) {
            }


            public void onSensorChanged(SensorEvent event) {
                // TODO Auto-generated method stub
                switch (event.sensor.getType()) {
                case Sensor.TYPE_ACCELEROMETER:
                    System.arraycopy(event.values, 0, mValuesAccel, 0, 3);
                    break;

                case Sensor.TYPE_MAGNETIC_FIELD:
                    System.arraycopy(event.values, 0, mValuesMagnet, 0, 3);
                    break;
                }
            };
        };

        setListners(sensorManager, mEventListener);

SensorManager.getRotationMatrix(mRotationMatrix, null, mValuesAccel, mValuesMagnet);
                SensorManager.getOrientation(mRotationMatrix, mValuesOrientation);
                final CharSequence test;
                test = ","+mValuesOrientation[0] +","+mValuesOrientation[1]+ ","+ mValuesOrientation[2];
于 2012-08-29T10:10:26.877 回答