2013-07-01 4 views
4

Как определить, имеет ли устройство андроида гироскоп? В настоящее время я использую следующий метод, чтобы определить, доступен ли гироскоп. Если гироскоп недоступен, используйте акселерометр.Андроид обнаружен доступен гироскоп

SensorManager mgr = (SensorManager) getSystemService(SENSOR_SERVICE); 
     List<Sensor> sensors = mgr.getSensorList(Sensor.TYPE_ALL); 
     for (Sensor sensor : sensors) { 
      Log.i("sensors",sensor.getName()); 
      if(sensor.getName().contains("Gyroscope")){ 
       try{ 
       mSensorManager.registerListener(this, 
          mSensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR), 
          SensorManager.SENSOR_DELAY_FASTEST); 
       return; 
       }catch(Exception e){ 
       } 
      } 
     } 
     mSensorManager.registerListener(this, 
       mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 
       SensorManager.SENSOR_DELAY_FASTEST); 

Однако некоторые из моих пользователей заявляют, что они не могут использовать гироскоп. Есть ли проблемы с кодом?

ответ

12

Вы можете просто использовать функции системы в Package Manager для проверки, если устройство имеет гироскоп в нем:

PackageManager packageManager = getPackageManager(); 
boolean gyroExists = packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_GYROSCOPE); 

Ваш текущий код может не работать на некоторых устройствах, как имя датчика не гарантируется содержать Gyroscope в этом.

+0

имеет смысл, чем принятый ответ. – klutch

1

Вы должны использовать

sensor.getType() == Sensor.TYPE_GYROSCOPE 

вместо вашего текущего sensor.getName().contains("Gyroscope"), чтобы определить, если датчик представляет собой гироскоп.

7

Используйте это:

mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
if(mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE) != null) 
{ 

     // Sensor FOUND 
} 
else 
{ 
     //Sensor NOT FOUND 
} 
+0

Спасибо, это хорошо работает. Я предпочитаю этот ответ для моего вопроса. –

0

Это мой метод:

public static boolean existGyroscope(Context ctx){ 
    SensorManager mSensorManager = (SensorManager) ctx.getSystemService(Context.SENSOR_SERVICE); 
    if(mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE) != null){ 
     return true; 
    }else{ 
     return false; 
    } 
} 

используется во всех моих приложениях.

Смежные вопросы