安卓:检测陀螺仪是否可用

10

我该如何检测Android设备是否有陀螺仪?目前我使用以下方法来检测是否有陀螺仪。如果没有陀螺仪,则使用加速计。

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

然而,我的一些应用用户抱怨他们无法使用陀螺仪。代码有什么问题吗?

4个回答

22
你可以简单地使用包管理器的系统功能来检查设备是否具有陀螺仪:
PackageManager packageManager = getPackageManager();
boolean gyroExists = packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_GYROSCOPE);

您当前的代码可能无法在某些设备上工作,因为传感器名称不保证包含Gyroscope


7
请使用以下内容:
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
if(mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE) != null)
{

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

谢谢,这很有效。我更喜欢这个问题的答案。 - JR Tan

2

你应该使用

sensor.getType() == Sensor.TYPE_GYROSCOPE

使用sensor.getName().contains("陀螺仪")来确定传感器是否为陀螺仪,代替当前的代码。


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

在我所有的应用程序中都使用了它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接