2016-04-26 4 views
2

Je travaille sur une application/jeu qui devrait basculer entre portrait et reversePortrait en mode multijoueur. (Principalement parce que chaque joueur peut utiliser le clavier à son tour alors que l'appareil est fixé sur la table entre eux.)Android: comment forcer l'orientation inverse portrait même si l'écran de rotation automatique du périphérique est éteint?

Mon application fonctionne correctement lorsque la rotation automatique est activée. Mais l'orientation reversePortrait n'est JAMAIS réalisable lorsque l'appareil effectue une rotation automatique est désactivé!

Ce que je l'ai fait jusqu'à présent est que je me suis fixé l'orientation dans le fichier Manifest:

<activity 
    android:name=".MainActivity" 
    android:configChanges="orientation|keyboardHidden" 
    android:screenOrientation="portrait"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

puis-je changer l'orientation par programme dans l'exécution en appelant cette méthode en cas de besoin:

public void rotateScreen(boolean reverse){  
    if (reverse) { 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); 
    } 
    else{ 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    } 
} 

Mais cela ne force toujours pas à l'orientation reversePortrait si la rotation automatique du périphérique est désactivée.

J'ai également essayé la méthode , mais cela n'a pas fonctionné aussi bien. Je pense que ça s'appelle seulement après avoir changé l'orientation déjà, pas avant!

J'ai même essayé screenOrientation="reversePortrait" dans le fichier Manifest, mais même cela est inefficace lorsque la rotation automatique est désactivée.

+0

Vous pouvez ajouter une vérification à votre 'rotateScreenMethod()' pour qu'il vérifie 'Settings.System.ACCELEROMETER_ROTATION', et le définir s'il ne l'est pas. Voir cette réponse pour plus d'informations: http://stackoverflow.com/a/4909079/2891462. – user2891462

Répondre

0

Après beaucoup de recherches, semble que la seule façon de passer outre l'orientation de l'appareil verrouillé et l'écran à une orientation portrait inverse est de force permettant au dispositif automatique -tourner.

premier, doit ajouter cette autorisation dans le fichier manifeste au-dessus de la balise:

<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 

alors, définir quelque chose comme ça dans le MainActivity:

public boolean enableAutoRotate(){ 

     boolean isAutoRotate = android.provider.Settings.System 
       .getInt(getContentResolver(),Settings.System.ACCELEROMETER_ROTATION, 1) == 1; 

     if (!isAutoRotate){ 
      try { 
       android.provider.Settings.System 
         .putInt(getContentResolver(),Settings.System.ACCELEROMETER_ROTATION, 1); 

      } catch (Exception e){ 
       e.printStackTrace(); 
      } 
     } 

     isAutoRotate = android.provider.Settings.System 
       .getInt(getContentResolver(),Settings.System.ACCELEROMETER_ROTATION, 1) == 1; 

     return isAutoRotate; 
} 

L'essai et la capture est importante pour prévenir l'application ne plante pas si l'utilisateur n'a pas donné ou supprimé l'autorisation.

ensuite, définir l'orientation en cas de besoin d'utiliser quelque chose comme ceci:

public void rotateScreen(boolean reverse){ 

     if (enableAutoRotate()){ 
      if (reverse) { 
       setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); 

      } 

      else { 
       setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

      } 
     } 
    } 

méthode rotateScreen peut également être booléen au lieu du vide, si nécessaire.

0

Je ne sais pas exactement ce que vous voulez réaliser. Appelez votre méthode OnConfigurationChanged

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    rotateScreen(true); 
    super.onConfigurationChanged(newConfig); 
} 

mais ici une fois le premier lancement de l'écran est inversée, mais vous pouvez appliquer ce selon vos besoins.

S'il vous plaît fournir plus de détails ce que vous voulez achive

+0

J'ai essayé cette méthode aussi ... ça n'a pas fonctionné .. Je pense qu'il n'est jamais appelé lorsque l'auto-rotation de l'appareil est OFF ... ce que je veux réaliser, c'est pouvoir régler la rotation de l'écran pour inverser même le portrait si la rotation automatique de l'appareil est désactivée. –

+0

exactement ce que vous voulez accomplir? – MobDev

+0

Je veux réaliser ceci: régler la rotation de l'écran pour inverser le portrait même si la rotation automatique de l'appareil est désactivée. –