2017-11-02 4 views
0

Ich entwickle eine Anwendung, in der ich die Genauigkeit von 2 Sensortyp Daten wissen müssen, die TYPE_ACCELEROMETER und TYPE_MAGNETIC_FIELD sind. Ich habe wie nach den SensorEventListener auf beiden Sensortypen registriert:onAccuraryChanged() wird nicht mit mehreren Sensortypen zurückgerufen

 mSensorManager.registerListener(mSensorEventListener, 
        mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 
        SensorManager.SENSOR_DELAY_NORMAL, SensorManager.SENSOR_DELAY_UI); 
      mSensorManager.registerListener(mSensorEventListener, 
        mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), 
        SensorManager.SENSOR_DELAY_NORMAL, SensorManager.SENSOR_DELAY_UI); 

Dann in meinen Zuhörern, ich habe so etwas wie:

 @Override public void onAccuracyChanged(Sensor sensor, int i) { 
     switch (sensor.getType()) { 
      case Sensor.TYPE_ACCELEROMETER: 
       if (i == SensorManager.SENSOR_STATUS_ACCURACY_HIGH) { 
        ..... 
       } 
       break; 
      case Sensor.TYPE_MAGNETIC_FIELD: 
       if (i == SensorManager.SENSOR_STATUS_ACCURACY_HIGH) { 
        ..... 
       } 
       break; 
      } 
     } 

jedoch aus irgendeinem Grunde, wenn es wieder aufgerufen wird, die sensor.getType() ist immer TYPE_ACCELEROMETER, ich habe noch nie einen bekommen .... Verwende ich diesen Rückruf? Schätzen Sie irgendwelche Vorschläge.

Antwort

1

Versuchen Sie diesen Code:

sensorManager = (SensorManager) 
getActivity().getSystemService(Context.SENSOR_SERVICE); 
sensorAccelerometer = 
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
sensorMagnetic = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); 
sensorEventListener = new SensorEventListener() { 
@Override 
public void onSensorChanged(SensorEvent event) { 
     if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) { 
      magnetic = event.values; 
      tv.setText("X: "+ magnetic.values[0] + ...); 
     } 
     if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){ 
      gravity = event.values; 
      tv2.setText(X: " + gravity.values[0] + ...); 
     } 
    } 
} 

https://stackoverflow.com/a/41860246/7092449

Vielleicht nur einen Sensor siehe wechseln und brechen andere;)

+0

Ich kann tatsächlich beid Sensoren Informationen erhalten, in 'onSensorChanged()' zurückrufen, nur die "onAccuracyChanged" ist problematisch. – JohnLXiang

Verwandte Themen