Logi c для определения направления киблы с помощью акселерометра и датчиков поля magneti c - PullRequest
1 голос
/ 01 августа 2020

Я пытаюсь реализовать logi c для поиска направления киблы.

Я использовал Sensor.TYPE_ORIENTATION и скопировал код из сюда

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

но я обнаружил, что Sensor.TYPE_ORIENTATION устарел, и вместо этого я использовал акселерометр и датчики поля magneti c из здесь

вот мой код

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];
                }
            }

Пытаюсь получить ученую степень и голову. что я здесь делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...