문제

How can I detect whether the android device has gyroscope? Currently I'm using the following method to detect whether gyroscope is available. If gyroscope not available, then use accelerometer.

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);

However some of my app users complaint they can't use gyroscope. Is there any problem with the code?

도움이 되었습니까?

해결책

You can simply use the Package Manager's System features to check if the device has a gyroscope in it:

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

Your current code may not work on some devices as the sensor name is not guaranteed to contain Gyroscope in it.

다른 팁

Use this:

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

         // Sensor FOUND
}
else
{
        //Sensor NOT FOUND
}

You should use

sensor.getType() == Sensor.TYPE_GYROSCOPE

in place of your current sensor.getName().contains("Gyroscope") to determine if the sensor is a Gyroscope.

This is my method:

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;
    }
}

used in all my apps.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top