Désactiver et activer les changements d'orientation dans une activité dans Android par programme

J'ai une application qui fait du personnel de fond. Lorsque l'arrière-plan fonctionne, un cercle de progression s'affiche, si l'appareil tourne pendant cette période, l'activité est "réinitialisée" et je veux éviter cela.

Pour cette raison, j'ai décidé de désactiver l'orientation pendant ce processus. J'ai vu des discussions différentes pour cette question, mais aucune avec une solution valide, du moins dans mon cas.

Les solutions affichées concernent la façon de fixer l'orientation de l'activité, mais vous devez traiter le fait que les orientations REVERSE ne sont pas retournées si vous utilisez:

getResources().getConfiguration().orientation 

La fonction ci-dessus renvoie SCREEN_ORIENTATION_PORTRAIT à la fois pour les cas RETTRAIT et REVERSE_PORTRAIT (au moins dans mes tests).

Donc, à la fin, j'ai utilisé la valeur Rotation pour faire face à cela, alors mon code "désactiver la rotation" est:

 int rotation = getWindowManager().getDefaultDisplay().getRotation(); switch(rotation) { case Surface.ROTATION_180: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); break; case Surface.ROTATION_270: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); break; case Surface.ROTATION_0: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); break; case Surface.ROTATION_90: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); break; } 

Et pour autoriser à nouveau l'orientation:

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 

Cela fonctionne parfaitement dans un périphérique avec Android 4.1.2, mais dans un périphérique avec Android 4.2.1, il ne fonctionne pas comme prévu.

Je suppose que la gestion de la rotation dans le cycle de vie de l'activité devrait être un problème courant, mais je n'ai pas pu trouver une solution appropriée. Peut-être que je cherche la mauvaise direction, donc toute aide est vraiment bienvenue.

Merci d'avance, Ivan.

4 Solutions collect form web for “Désactiver et activer les changements d'orientation dans une activité dans Android par programme”

Si vous souhaitez désactiver les modifications d'orientation du téléphone, vous pouvez utiliser ce code dans le manifeste

 <activity android:name=".class_name" 

// si vous voulez votre écran en portrait

 android:screenOrientation="portrait" > 

// si vous voulez que l'écran en mode paysage

 android:screenOrientation="landscape" > 

Et si vous souhaitez que votre téléphone change d'orientation mais empêche le redémarrage, vous pouvez utiliser la méthode onConfigurationChanged dans votre classe:

 @Override public void onConfigurationChanged(Configuration newConfig) { // ignore orientation change if (newConfig.orientation != Configuration.ORIENTATION_LANDSCAPE) { super.onConfigurationChanged(newConfig); } } 

Essaye ça..

Il n'y a pas de problème dans votre code. C'est correct, je l'ai vérifié. Utilisez ce code dans onConfigurationChanged qui peut donner la différence et une autre chose est utiliser ci-dessous code pour désactiver la réinitialisation de l'activité.

 <activity android:name="YourActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:windowSoftInputMode="adjustPan"/> 

Vous pouvez remplacer la méthode on onConfiguratoinChanged pour désactiver les modifications d'orientation:

 @Override public void onConfigurationChanged(Configuration newConfig) { // ignore orientation change if (newConfig.orientation != Configuration.ORIENTATION_LANDSCAPE) { super.onConfigurationChanged(newConfig); } } 

N'oubliez pas d'activer l'orientation de l'auditeur modifié dans votre fichier AndroidManifest.xml:

 <activity android:configChanges="orientation" > 

Simple: une ligne à ajouter après Nom de l'activité dans le manifeste android

 android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale 

Cela a fonctionné pour moi.

coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.