2012-01-26 13 views
10

mi piacerebbe sapere se un sensore (ad esempio l'accellerometro) è presente sul mio dispositivo Android.Come sapere se un sensore è presente sul mio dispositivo Android?

Mi occupo della classe SensorManager. Ecco il codice che sto usando:

sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE); 
sensorMgr.registerListener(this,sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),1); 

Grazie.

risposta

10

la seconda linea può essere utilizzata per questo:

boolean accelerometer; 

accelerometer = sensorMgr.registerListener(this,sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 

if(accelerometer) 
{ 
. 
. 
} 
+0

Funziona, grazie –

+6

Perché si registrare un ascoltatore? –

18

un'occhiata qui:

http://developer.android.com/reference/android/content/pm/PackageManager.html

se pensi di aver bisogno di farlo:

PackageManager manager = getPackageManager(); 
boolean hasAccelerometer = manager.hasSystemFeature(PackageManager.FEATURE_SENSOR_ACCELEROMETER); 
+0

Proverò questo, grazie. –

+1

Questo è molto più semplice perché non si dipende dal gestore del sensore –

3

Dal momento che ottengo un errore richiesto API9, io uso invece:

SensorManager mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
    List<Sensor> deviceSensors = mSensorManager.getSensorList(Sensor.TYPE_ALL); 
    for (int i = 0; i< deviceSensors.size(); i++) { 
     if (deviceSensors.get(i).getType() == Sensor.TYPE_PRESSURE) { 
      mHasBarometer = true; 
      break; 
     } 
    } 
9

Ecco raccomandazione da developer.android.com: http://developer.android.com/guide/topics/sensors/sensors_overview.html#sensors-identify

È possibile determinare se un tipo specifico di sensore esiste in un dispositivo mediante il metodo getDefaultSensor() e passando il tipo costante per una specifica sensore. Se un dispositivo ha più di un sensore di un determinato tipo, uno dei sensori deve essere designato come sensore predefinito. Se un sensore predefinito non esiste per un dato tipo di sensore, la chiamata al metodo restituisce null, il che significa che il dispositivo non ha quel tipo di sensore.

private SensorManager mSensorManager; 
... 
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
if (mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD) != null){ 
    // Success! There's a magnetometer. 
} 
else { 
    // Failure! No magnetometer. 
} 
0

Io uso il seguente codice:

 SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
     if(sensorManager.getSensorList(Sensor.TYPE_MAGNETIC_FIELD).size() > 0) 
     { 
      //sensor exist 
     } 
     else 
     { 
      //disable feature 
     } 
Problemi correlati