Как определить, имеет ли устройство андроида гироскоп? В настоящее время я использую следующий метод, чтобы определить, доступен ли гироскоп. Если гироскоп недоступен, используйте акселерометр.
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);
Однако некоторые из моих пользователей приложений жалобы они не могут использовать гироскоп. Есть ли какие-либо проблемы с кодом?
Вы можете просто использовать функции System Manager для диспетчера пакетов, чтобы проверить, есть ли у него в нем гироскоп:
PackageManager packageManager = getPackageManager(); boolean gyroExists = packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_GYROSCOPE);
Ваш текущий код может не работать на некоторых устройствах, так как имя датчика не гарантирует Gyroscope
в нем Gyroscope
.
Использовать это:
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); if(mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE) != null) { // Sensor FOUND } else { //Sensor NOT FOUND }
Вы должны использовать
sensor.getType() == Sensor.TYPE_GYROSCOPE
Вместо вашего текущего sensor.getName().contains("Gyroscope")
чтобы определить, является ли датчик гироскопом.
Это мой метод:
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; } }
Используется во всех моих приложениях.