J'ai une de mes activités que je voudrais empêcher de tourner parce que je lance un AsyncTask, et la rotation de l'écran le fait redémarrer. Donc, y a-t-il un moyen de dire à cette activité "NE TOURNE PAS l'écran même si l'utilisateur secoue son téléphone comme un fou"?
Réponses
Trop de publicités?Vous pouvez suivre la logique ci-dessous pour empêcher la rotation automatique de l'écran tandis que votre AsyncTask
est en cours d'exécution:
- Magasin de votre orientation de l'écran à l'intérieur de votre activité à l'aide de
getRequestedOrientation()
. - Désactiver automatiquement l'orientation de l'écran à l'aide de
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR)
. - Exécuter/exécuter votre
AsyncTask
. - À la fin de votre
AsyncTask
restaurer votre précédente d'orientation à l'aide desetRequestedOrientation(oldOrientation)
.
Veuillez noter qu'il existe plusieurs façons d'accéder Activity
(qui s'exécute sur le thread de l'INTERFACE utilisateur), les propriétés à l'intérieur d'un AsyncTask
. Vous pouvez mettre en œuvre votre AsyncTask
intérieur de la classe ou vous pouvez utiliser le message d' Handler
que de passer votre Activiy
classe.
La façon la plus simple de le faire était de mettre this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
au sein deCréer, juste après setContentView(R.layout.activity_main);
alors...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
Dans votre manifeste: pour chaque activité que vous souhaitez arrêter l'écran, ajoutez simplement:
<activity
...
...
android:screenOrientation="landscape">
si vous souhaitez le verrouiller en mode horizontal ou le code ci-dessous si vous souhaitez le verrouiller en mode vertical:
<activity
...
...
android:screenOrientation="portrait">
Activity.java
@Override
public void onConfigurationChanged(Configuration newConfig) {
try {
super.onConfigurationChanged(newConfig);
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
// land
} else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
// port
}
} catch (Exception ex) {
}
AndroidManifest.xml
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name="QRCodeActivity" android:label="@string/app_name"
android:screenOrientation="landscape" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>