2013-07-01 5 views
4

안드로이드 장치에 자이로 스코프가 있는지 여부를 어떻게 확인할 수 있습니까? 현재 자이로 스코프를 사용할 수 있는지 여부를 감지하기 위해 다음 방법을 사용하고 있습니다. 자이로 스코프를 사용할 수없는 경우 가속도계를 사용하십시오.android detect available 자이로 스코프

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

당신은 단순히 장치가있는 자이로 스코프를 가지고 있는지 확인하기 위해 패키지 관리자의 시스템 기능을 사용할 수 있습니다 :

센서 이름이 Gyroscope를 포함하도록 보장되지 않는 현재 코드가 일부 장치에서 작동하지 않을 수 있습니다
PackageManager packageManager = getPackageManager(); 
boolean gyroExists = packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_GYROSCOPE); 

그 안에.

+0

은 허용되는 답변보다 더 좋습니다. – klutch

1

당신은 센서는 자이로 스코프인지 확인 sensor.getName().contains("Gyroscope") 현재의 장소에

sensor.getType() == Sensor.TYPE_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; 
    } 
} 

.