Comment puis-je obtenir l'orientation ACTUELLE (ActivityInfo.SCREEN_ORIENTATION_*) d'un appareil Android?
Je voudrais savoir détaillées de l'orientation de l'appareil, de préférence de SCREEN_ORIENTATION_LANDSCAPE
, SCREEN_ORIENTATION_PORTRAIT
, SCREEN_ORIENTATION_REVERSE_LANDSCAPE
, SCREEN_ORIENTATION_REVERSE_PORTRAIT
de ActivityInfo
ou l'équivalent.
Quelques réponses ici sur StackOverflow inclus
getWindowManager().getDefaultDisplay().getRotation()
mais ce n'est pas vraiment vous me dire si l'appareil est en mode portrait ou paysage, seulement de la façon dont c'est tourné en référence à sa position naturelle - qui à son tour peut être en mode paysage ou portrait en premier lieu.
getResources().getConfiguration().orientation
retourne l'une des trois suivantes: ORIENTATION_LANDSCAPE
, ORIENTATION_PORTRAIT
, ORIENTATION_SQUARE
, qui ensuite n'a pas vraiment me dire de quelle façon le téléphone est activé (si elle est à l'envers vers le bas ou les côtés il est tourné vers).
Je sais que je pourrais utiliser celui-ci en combinaison avec DisplayMetrics
pour trouver le dispositif de l'orientation naturelle, mais il n'y a vraiment pas de meilleure façon?
Vous devez vous connecter pour publier un commentaire.
J'ai fini par utiliser la solution suivante:
NOTE: Certains utilisateurs (Gertrude et holtaf dans les commentaires ci-dessous) a souligné que cette solution ne fonctionnera pas sur tous les appareils que le sens de rotation de l'orientation naturelle n'est pas normalisée.
Approche la plus Simple serait d'utiliser
1 est pour le Portrait et 2 pour le Paysage.
getResources().getConfiguration().orientation
est la façon standard de connaître l'orientation actuelle utilisée. Toutefois, si ce n'est pas de répondre à vos besoins alors peut-être vous pouvez utiliser des Capteurs pour calculer en termes d'angle. Lire cette et cetteJe pense que votre problème est que vous pouvez détecter les paysages et les portraits, mais pas l'inverse paysage et l'inverse protrait qu'ils ne sont pas pris en charge dans les versions plus anciennes. Pour détecter ce que vous pouvez faire est que vous pouvez utiliser à la fois oreintation et de la rotation. Je vais vous en donner une idée, il peut être utile pour vous.
essayer cela, je pense qu'il peut résoudre votre problème.
J'ai fini à l'aide de Zoltán la réponse ci-dessus, qui fonctionne très bien, sauf quand je l'ai essayé sur une tablette (un Samsung P6210 Galaxy Tab 7.0 Plus). En mode portrait, il est retourné SCREEN_ORIENTATION_REVERSE_PORTRAIT. Ainsi, dans le else (si naturelle orientation paysage), j'ai troqué le cas pour ROTATION_90 et ROTATION_270, et tout semble fonctionner correctement. (Je n'ai pas assez de réputation pour ce post un commentaire à Zoltán de la réponse.)
Vous pourriez le faire d'une manière très simple:
obtenez l'écran
widht
etheight
.la largeur de l'écran sera toujours plus élevée lorsque l'appareil est en orientation paysage.
Est-ce à résoudre votre problème?