2012-08-22 12 views
8

Ho una classe che implementa SensorEventListener e vorrei ottenere il tilt Angle del mio dispositivo utilizzando il Accelerometer.Ottieni l'angolo di inclinazione dell'accelerometro Android

Ho cercato degli esempi su Internet ma usano Sensor.TYPE_MAGNETIC_FIELD.

Credo che il mio dispositivo non dispone di questo sensore, perché quando faccio la seguente controllo
manager.getSensorList(Sensor.TYPE_ACCELEROMETER).size(), ottengo a zero.

C'è un modo per ottenere il tilt Angle utilizzando solo i valori Sensor.TYPE_ACCELEROMETER?

risposta

0

Prova questo,

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]; 
+0

Come ho detto il mio dispositivo non hanno Sensor.TYPE_MAGNETIC_FIELD. C'è un modo per ottenere l'angolo di inclinazione semplicemente usando i valori Sensor.TYPE_ACCELEROMETER? – user1615888

+0

quindi utilizzare solo Sensor.TYPE-Accelerometro case – AndroidCrazy

+1

Ma poi mValuesMagnet sarà nullo, e non può essere. – user1615888

0

È possibile utilizzare l'accelerometro per ottenere una lettura di inclinazione. Se imposti un accelerometro, noterai che include la forza di gravità. Quindi se il telefono è a faccia in su su un tavolo l'asse z si registrerà da qualche parte vicino a 9.81 (la forza di gravità) e gli assi xey saranno a 0. Mentre inclini il telefono verrà proiettata la forza di gravità sull'asse xe/o y. Quindi i valori xey ti diranno l'inclinazione del telefono.

Problemi correlati