首页 > 解决方案 > 使用加速度计和磁场传感器寻找朝拜方向的逻辑

问题描述

我正在尝试实现寻找朝拜方向的逻辑。

我从这里Sensor.TYPE_ORIENTATION使用并复制了代码

mSensorManager =  (SensorManager) context.getSystemService(SENSOR_SERVICE);
sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);

但我发现它已被弃用,相反,我从这里Sensor.TYPE_ORIENTATION使用了加速度计和磁场传感器

这是我现在的代码

private void registerSensor() {
        mySensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        accelerometer = mySensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        magnetometer = mySensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
        mySensorManager.registerListener(mySensorEventListener, accelerometer, SensorManager.SENSOR_DELAY_UI);
        mySensorManager.registerListener(mySensorEventListener, magnetometer, SensorManager.SENSOR_DELAY_UI);
    }
private SensorEventListener mySensorEventListener = new SensorEventListener() {
        float degree;
        float head;
        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onSensorChanged(SensorEvent event) {
            // TODO Auto-generated method stub
            if (lastKnownLocation == null || image == null || arrow == null) {
                return;
            }

            if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
                mGravity = event.values;
            if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
                mGeomagnetic = event.values;
            if (mGravity != null && mGeomagnetic != null) {
                float R[] = new float[9];
                float I[] = new float[9];
                boolean success = SensorManager.getRotationMatrix(R, I, mGravity, mGeomagnetic);
                if (success) {
                    float orientation[] = new float[3];
                    SensorManager.getOrientation(R, orientation);
                    degree = orientation[2]; // orientation contains: azimut, pitch and roll
                    head = orientation[0];
                }
            }

我正在努力获得学位和头衔。我在这里做错了什么?

标签: androidgeolocationlocationandroid-sensors

解决方案


推荐阅读