2013-07-01 100 views
4

如何檢測android設備是否有陀螺儀?目前我正在使用以下方法來檢測陀螺儀是否可用。如果陀螺儀不可用,則使用加速度計。android detect是陀螺儀可用

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

你可以簡單地使用軟件包管理器的系統功能檢查,如果該設備中有一個陀螺儀:

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; 
    } 
} 
在我所有的應用程序使用