11

J'ai un problème d'orientation avec un Live Wallpaper que j'ai écrit. Fondamentalement, la toile va tourner en fonction de l'application ouverte au-dessus. J'ai testé cela et j'ai réalisé que la méthode onSurfaceChanged() se déclenche quand je retourne à l'écran d'accueil à partir d'une application précédemment ouverte dont l'orientation a été modifiée.Empêche le changement d'orientation du fond d'écran dynamique lorsqu'une application est ouverte et que l'orientation est modifiée?

Je suppose qu'une meilleure question serait, pourquoi mon changement de surface de papier peint en direct quand une application est ouverte et son orientation est modifiée? Y a-t-il un moyen d'empêcher que mon orientation de Live Wallpaper change? Merci, j'espère que cela a du sens?

+0

Définissez-vous une orientation dans le manifeste? Ou même par programme? Si non, les réponses à la question [this] (http://stackoverflow.com/q/2150287/404469) devraient aider. – gary

+0

Aucune activité n'est utilisée (en dehors de l'activité des paramètres) dans un fond d'écran animé. Un LWP étend WallpaperService dans lequel il crée une instance de la classe Engine dans la fonction onCreateEngine(). – worked

+0

Pouvons-nous avoir plus d'informations? Quelles sont les applications à l'origine de cette situation? L'orientation est-elle permanente ou temporaire jusqu'à ce que l'écran principal soit redessiné? Certaines applications telles que l'appareil photo intégré forcent l'écran à changer d'orientation, mais ces modifications sont annulées lorsque l'application est terminée. –

Répondre

1

L'application Android redémarre l'activité lorsque l'orientation change. Vous pouvez utiliser

  1. android: configChanges dans votre manifeste. L'activité est arrêtée et redémarrée par défaut, lorsqu'une modification de configuration se produit au moment de l'exécution, mais la déclaration d'une configuration avec cet attribut empêchera le redémarrage de l'activité. Au lieu de cela, l'activité reste en cours et sa méthode est appelée.
  2. utilisation android: screenOrientatin = "portrait" ou "paysage" il forcera l'application à exécuter dans le mode que vous spécifiez. Cependant, cela n'empêchera pas l'activité d'être arrêtée et redémarrée.
+0

salut, pourquoi l'activité est-elle forcée de redémarrer et comment peut-on empêcher cela, en particulier j'en ai besoin dans le contexte des fonds d'écran animés – Maysam

1

Vous pouvez gérer l'orientation de l'écran à partir du fichier android.service.wallpaper.WallpaperService. classe moteur avec la méthode suivante:

public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) 

... juste gérer l'événement en conséquence.

Vous IMPOSSIBLE ajouter android: configChanges ni android: screenOrientation à un WallpaperService! (que vous utilisez lors de la création d'un fond d'écran en direct)

Je l'aurais ajouté comme commentaire à la réponse de "Anirudha", mais je n'ai pas assez de réputation pour le faire.