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

4 に答える 4

22

パッケージ マネージャーのシステム機能を使用して、デバイスにジャイロスコープが搭載されているかどうかを簡単に確認できます。

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

センサー名が含まGyroscopeれていることが保証されていないため、現在のコードは一部のデバイスでは機能しない場合があります。

于 2013-07-01T04:14:14.900 に答える
7

これを使って:

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

         // Sensor FOUND
}
else
{
        //Sensor NOT FOUND
}
于 2013-07-01T04:17:34.653 に答える
2

使用する必要があります

sensor.getType() == Sensor.TYPE_GYROSCOPE

現在の代わりにsensor.getName().contains("Gyroscope")、センサーがジャイロスコープであるかどうかを判断します。

于 2013-07-01T04:14:06.200 に答える
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;
    }
}

すべてのアプリで使用されています。

于 2016-02-18T22:54:01.590 に答える