Question

J'écris une application Compass mais je ne peux pas accéder aux capteurs nécessaires pour une raison quelconque. J'ai implémenté le SensorEventListener Interface et enregistrer mes capteurs de cette façon:

    sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
    accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    magnetometer = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

Dans mon onSensorChange() méthode:

public void onSensorChanged(SensorEvent event) {
    Toast t = Toast.makeText(this, "onSensorChanged", Toast.LENGTH_LONG);
    t.setGravity(Gravity.TOP, 0, 0);
    t.show();
    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);
            north = orientation[0];
        }
    }
}

La Toast Le message ne s'affiche pas à l'écran et lorsque j'essaie de mettre la valeur nord dans un TextView La sortie est 0. Serait formidable si quelqu'un pouvait m'expliquer pourquoi je ne peux pas accéder au onSensorChanged() méthode. Autorisations de manifeste:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Était-ce utile?

La solution

sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
sensorManager.registerListener(this, magnetometer, SensorManager.SENSOR_DELAY_NORMAL);

N'oubliez pas de les désinscrire.

Suite: http://developer.android.com/reference/android/hardware/sensormanager.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top