2012-01-26 10 views
10

me gustaría saber si un sensor (por ejemplo, el acelerómetro) está presente en mi dispositivo Android.¿Cómo saber si un sensor está presente en mi dispositivo Android?

Estoy tratando con la clase SensorManager. Aquí está el código que estoy utilizando:

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

Gracias.

Respuesta

10

Su segunda línea se puede utilizar para esto:

boolean accelerometer; 

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

if(accelerometer) 
{ 
. 
. 
} 
+0

Funciona gracias –

+6

¿Por qué registrar un oyente? –

18

echar un vistazo aquí:

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

si piensa que tiene que hacer lo siguiente:

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

Voy a intentar esto, gracias. –

+1

Esto es mucho mejor porque no depende del administrador del sensor –

3

Como recibo un error requerido API9, utilizo en su lugar:

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

Aquí es recomendación de developer.android.com: http://developer.android.com/guide/topics/sensors/sensors_overview.html#sensors-identify

Se puede determinar si un tipo específico de sensor existe en un dispositivo mediante el método getDefaultSensor() y pasando en el tipo constante para una específica sensor. Si un dispositivo tiene más de un sensor de un tipo determinado, uno de los sensores debe designarse como el sensor predeterminado. Si no existe un sensor predeterminado para un tipo determinado de sensor, la llamada al método devuelve nulo, lo que significa que el dispositivo no tiene ese tipo de sensor.

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

uso el siguiente código:

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