Android detecta giroscopio disponible
¿Cómo puedo detectar si el dispositivo Android tiene giroscopio? Actualmente estoy usando el siguiente método para detectar si giroscopio está disponible. Si el giroscopio no está disponible, utilice el acelerómetro.
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);
Sin embargo, algunos de mis usuarios de aplicaciones queja de que no pueden utilizar giroscopio. ¿Hay algún problema con el código?
- Dibujo en el aire con el teléfono Android
- Guardar los datos del sensor en el archivo de android
- Filtro complementario (Gyro + accel) con Android
- ¿Podemos dibujar línea en lienzo android entre dos puntos dados por giroscopio?
- Unity3D Android acelerómetro y giroscopio controles
- Combine giroscopio con acelerómetro para obtener el rumbo
- Sistema de Posicionamiento Interior basado en Giroscopio y Acelerómetro
- Conseguir vector de dirección en Android
- Android Gyroscope versículo Acelerómetro
- ¿Cómo encontrar la distancia de desplazamiento utilizando sensor acelerómetro en smartphone android?
- Gyro Sensor drift y Estimación de ángulo correcto
- Cuándo usar acelerómetro o giroscopio en Android
- Detectar actividad del usuario (correr, andar en bicicleta, conducir) usando Android
Simplemente puede utilizar las características del sistema del gestor de paquetes para comprobar si el dispositivo tiene un giroscopio en él:
PackageManager packageManager = getPackageManager(); boolean gyroExists = packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_GYROSCOPE);
Es posible que su código actual no funcione en algunos dispositivos, ya que no se garantiza que el nombre del sensor contenga Gyroscope
.
Utilizar esta:
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); if(mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE) != null) { // Sensor FOUND } else { //Sensor NOT FOUND }
Deberías usar
sensor.getType() == Sensor.TYPE_GYROSCOPE
En lugar de su actual sensor.getName().contains("Gyroscope")
para determinar si el sensor es un giroscopio.
Este es mi método:
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; } }
Utilizado en todas mis aplicaciones.
- Eliminación de línea o divisor entre la barra de acción y la pantalla principal en Android
- Taps rápidos (clics) en RecyclerView abre varios fragmentos