Cómo obtener la dirección en Android (como el norte, oeste)
Soy nuevo en Android y quiero obtener dirección de acuerdo a mi cámara. ¿Cómo puedo obtener información de dirección según mi cámara? ¿Podría dar una idea para esto?
- Android Market dice que mi aplicación "no está en el grupo de destino" o que "no se puede instalar en este dispositivo"
- ¿Para qué sirve el "punto" al registrar una actividad
- Mejor lugar para poner versionCode / versionName? build.gradle vs AndroidManifest.xml
- Cómo cambiar el grupo de usuarios de la aplicación
- ¿Cómo puedo crear una intención navegable en el manifiesto android?
- Advertencia sobre <uses-sdk> en Manifest?
- Dos actividades principales en AndroidManifest.xml
- Siempre vuelve a la pantalla de inicio de sesión
- Reanude la actividad principal en lugar de iniciar la actividad del lanzador
- Problema de filtrado del mercado de Android
- AutoStart La aplicación no funciona correctamente
- Cómo configurar la apariencia de texto en el archivo de manifiesto de Android?
- Aplicación para Android con múltiples actividades
TYPE_ORIENTATION está obsoleto
Ya no podemos usar el Sensor de Orientación, podemos usar el Sensor de Campo Magnético y los Sensores de Acelerómetro en tándem para obtener una funcionalidad equivalente. Es más trabajo pero permite seguir utilizando una devolución de llamada para manejar los cambios de orientación.
Aquí está una muestra de la brújula : http://www.codingforandroid.com/2011/01/using-orientation-sensors-simple.html
Conversión de acelerómetro y campo magnético a azimut :
float[] mGravity; float[] mGeomagnetic; public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) mGravity = event.values; if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) mGeomagnetic = event.values; if (mGravity != null && mGeomagnetic != null) { float R[] = new float[9]; float I[] = new float[9]; if (SensorManager.getRotationMatrix(R, I, mGravity, mGeomagnetic)) { // orientation contains azimut, pitch and roll float orientation[] = new float[3]; SensorManager.getOrientation(R, orientation); azimut = orientation[0]; } } }
Para apuntar hacia el norte se puede calcular una rotación en grados:
float rotation = -azimut * 360 / (2 * 3.14159f);
No está seguro de lo que quiere decir con acuerdo a su cámara, pero se puede obtener en función de los sensores de hardware. Vea los siguientes enlaces:
Ejemplo de compás
También consulta la Sensor.TYPE_ORIENTATION en esta página.
Esto es lo que tengo hasta ahora que es un poco de trabajo para mí, los valores devueltos están entre 0 – 360, pero no creo que el norte está correctamente calibrado? Estoy usando esto en un LG G Pad corriendo con Android 5.0.1
public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) mGravity = event.values; if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) mGeomagnetic = event.values; if (mGravity != null && mGeomagnetic != null) { float R[] = new float[9]; float outR[] = new float[9]; float I[] = new float[9]; boolean success = SensorManager.getRotationMatrix(R, I, mGravity, mGeomagnetic); if (success) { float orientation[] = new float[3]; SensorManager.remapCoordinateSystem(R, SensorManager.AXIS_X, SensorManager.AXIS_Y, outR); SensorManager.getOrientation(outR, orientation); azimut = orientation[0]; float degree = (float)(Math.toDegrees(azimut)+360)%360; System.out.println("degree " + degree);
Estoy seguro de que hay cosas que he perdido pero espero que este es un punto de partida decente para los demás. Revisé un buen número de otras preguntas, comentarios, etc. para llegar a este punto.
- Evitar que el diálogo se abra varias veces al reanudar la actividad
- LinearLayout llenado de derecha a izquierda