11

Mam problem z orientacją na Live Wallpaper, którą napisałem. Zasadniczo płótno obraca się w zależności od aplikacji otwartej nad nim. Przetestowałem to i zdałem sobie sprawę, że metoda onSurfaceChanged() uruchamia się po powrocie na ekran główny z poprzednio otwartej aplikacji, której orientacja została zmieniona.Zapobieganie zmianie orientacji tapety na żywo po otwarciu aplikacji i zmianie orientacji?

Przypuszczam, że lepszym pytaniem byłoby, , dlaczego zmienia się moja Live Wallpaper Surface, gdy aplikacja jest otwierana i zmienia się jej orientacja? Czy istnieje sposób, aby zapobiec zmianie mojej orientacji tapety na żywo? Dzięki, mam nadzieję, że ma to sens?

+0

Czy definiujesz orientację w manifeście? Lub programowo nawet? Jeśli nie, odpowiedzi na to pytanie (http://stackoverflow.com/q/2150287/404469) powinny pomóc. – gary

+0

Żadna aktywność nie jest używana (poza aktywnością ustawień) w Live Wallpaper. LWP rozszerza usługę WallpaperService, w której tworzy instancję klasy Engine w funkcji onCreateEngine(). – worked

+0

Czy możemy uzyskać więcej informacji? Jakie są niektóre aplikacje, które to powodują? Czy orientacja jest trwała, czy tylko tymczasowa, dopóki ekran główny nie zostanie przerysowany? Niektóre aplikacje, takie jak wbudowany aparat, zmuszają ekran do zmiany orientacji, ale zmiany te są cofane po zakończeniu aplikacji. –

Odpowiedz

1

Aplikacja Android ponownie uruchamia działanie po zmianie orientacji. Można użyć

  1. android: configChanges w swoim manifeście. Działanie jest domyślnie wyłączane i ponownie uruchamiane, gdy zmiana konfiguracji następuje w środowisku wykonawczym, ale deklarowanie konfiguracji za pomocą tego atrybutu uniemożliwi ponowne uruchomienie działania. Zamiast tego działanie pozostaje aktywne i wywoływana jest jego metoda.
  2. użycie android: screenOrientatin = „portret” lub „krajobraz” zmusi aplikację do uruchomienia w trybie określonym przez użytkownika. Nie zapobiegnie to jednak wyłączeniu i ponownemu uruchomieniu działania.
+0

Cześć, dlaczego aktywność jest zmuszona do ponownego uruchomienia i jak można temu zapobiec, w szczególności potrzebuję tego w kontekście żywych tapet – Maysam

1

Możesz obsługiwać orientację ekranu z poziomu android.service.wallpaper.WallpaperService. Silnik klasa z następującą metodą:

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

... po prostu obsłużyć zdarzenia odpowiednio.

You NIE MOŻE dodać androida: configChanges ani android: screenOrientation do WallpaperService! (Który używasz podczas tworzenia tapety na żywo)

Dodałbym to jako komentarz do odpowiedzi "Anirudha", ale nie mam wystarczającej reputacji, aby to zrobić.

Powiązane problemy