¿Cómo detectar el paisaje izquierdo (normal) contra el derecho del paisaje (reverso) con la ayuda para los dispositivos naturales del paisaje?

Lo que me gustaría hacer:

  • Detectar la orientación actual del dispositivo (Vertical, Horizontal-Izquierda, Vertical (al revés), Horizontal-Derecha)
  • Diferenciar entre los dos modos de paisaje posibles (inclinado en el lado izquierdo, apoyado en el lado derecho)
  • Soporte de dispositivos que tienen el paisaje como su estado natural ( por ejemplo , se discute aquí )
  • Soporte <2.2 (no se puede usar getRotation () )

Sólo para aclarar, quiero saber en qué orientación se encuentra actualmente el diseño. ¿Qué dirección es la parte inferior del diseño? ¿Está en el retrato? ¿Está en el paisaje? ¿Es el paisaje izquierdo o derecho? Etc.

Lo más cercano que puedo encontrar es la orientación Activity.getResources (). GetConfiguration () , pero sólo devuelve tres valores posibles. ORIENTATION_LANDSCAPE, ORIENTATION_PORTRAIT u ORIENTATION_SQUARE. No dice qué tipo de paisaje.

Entonces, entonces pensé, bueno si puedo obtener el valor de orientación (como 90, 180, 270, etc) del dispositivo y compararlo con el valor de configuración anterior que podría averiguarlo. Por ejemplo, si el valor de configuración era ORIENTATION_LANDSCAPE y la orientación era 270, podría decir que estaba en el modo de paisaje inverso. Sin embargo, no parece ser una manera fácil de obtener el valor de orientación. Podría implementar un OrientationEventListener , pero eso parece excesivo ya que sólo necesito obtener el valor una vez en un momento específico, no constantemente.

Hay dos valores en la clase Display pero getOrientation está obsoleto y getRotation sólo está disponible para 2.2 y superior.

Ahora, incluso si conseguí este valor, todavía hay la cuestión de los dispositivos que son naturalmente paisaje. Significando que su valor 0 sería paisaje en lugar de retrato. Así que también necesito una manera segura de decir cuál (paisaje-izquierda, paisaje-derecha o retrato) corresponde a 0.

Hay un montón de puestos de SO sobre orientación y cuestiones similares, pero no he visto ninguna que tenga en cuenta todos estos temas. ¿Alguien ha descubierto esto?

Cuando todo está dicho y hecho me gustaría algo como Activity.getResources (). GetConfiguration (). Orientación, pero ser capaz de decir que el modo de paisaje que es.

El paisaje correcto no fue compatible hasta el 2.2. Tendrás que tener <2.2 dispositivos elegir en las opciones o algo así.

La única manera que logré superar esto (sin ir a la API 8) es mediante el registro de SensorManager (Sensor.TYPE_ACCELEROMETER) y obtener onSensorChanged eventos.

Me di cuenta de que cuando su pantalla está en modo horizontal, obtendrá valores cercanos a -9 (g) o +9 (g) en el eje espumoso (x). Usted puede apenas comprobar para positivo o el negativo, pero usted necesita ahorrar el estado en el caso que el dispositivo se pone de nuevo en la tabla con la cara hacia arriba

Su código (snippet) debería ser parecido a eso:

 private float mShiftAngle = 0; public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { aValues = event.values; int deviceRot = getResources().getConfiguration().orientation; if (deviceRot == Configuration.ORIENTATION_LANDSCAPE) { if (Math.abs(aValues[0])>4) mShiftAngle = (aValues[0]>0 ? 90 : -90); } else mShiftAngle = 0; } } 

Me ha ayudado, espero que esto te ayude.

  • OnCreate no se llama cuando la pantalla gira - Android
  • Android: Activa el estado de rotación del acelerómetro
  • ¿Por qué querría alguna vez `setRetainInstance (false)`? - O - La forma correcta de manejar la rotación del dispositivo
  • Aplicar una animación a varias vistas al mismo tiempo
  • Rotar la imagen en el centro no va lisa (Monodroid)
  • Fragmentos de Android que conservan datos
  • La música se detiene cuando la pantalla gira utilizando MediaPlayer en Android
  • Cómo rotar un lienzo en un punto específico usando android.graphics.Camera.rotateX (angle)
  • Cómo rotar el mapa de bits correctamente?
  • Rotar vídeo con mp4parser de acuerdo con la cámara utilizada
  • Desactivar la rotación automática en fragmento
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.