Próbuję napisać plik .apk, aby zmierzyć, jak długo trzeba obrócić ekran urządzenia z systemem Android (przechodząc przez kilka obrotów).Wiesz, kiedy kończy się obracanie za pomocą metody setRequestedOrientation
Używam wywołań setRequestedOrientation()
do reoriente ekranie w 4 pozycjach (PORTRAIT
, LANDSCAPE
, REVERSE_PORTRAIT
i REVERSE_LANDSCAPE
).
Mój problem polega na tym, że nie jestem w stanie stwierdzić, kiedy obrót się zakończył. Próbowałem kilku rozwiązań, ale każdy ma swoje problemy.
- Próbowałem użyć . Problem polega na tym, że ta metoda jest wyzwalana, gdy zmiana orientacji odbywa się z czujnika, a nie z
setRequestedOrientation()
. Muszę zadzwonić pod numersetRequestedOrientation()
z parametremFULL_SENSOR
doonConfigurationChanged
, aby działał po poprzednim połączeniu zsetRequestedOrientation()
. - Próbowałem dokonać pewnego rodzaju "blokowania", dodając pętlę while, aby sprawdzić orientację ekranu (w stopniach). Zadzwoniłem pod numer
android.view.Display.getRotation()
przedsetRequestedOrientation()
i zablokowałem z pętlą while, dopóki się nie zmieni. Niestety, to też nie działa. Powraca przed ponownym wyświetleniem interfejsu użytkownika. - Próbowałem śledzić cykl życia aktywności, czekając, aż
onCreate()
zostanie ponownie wywołane, aby założyć, że obrót został wykonany. Poprzednio zapętlałem się, dopóki mój licznik nie osiągnął wartości, w każdej iteracji wywołującejsetRequestedOrientation()
. W tym scenariuszu pętla while staje się instrukcją if i zakładam, żeonCreate
wywoła funkcję za każdym razem, aleonCreate()
nie zostanie wywołane po kilku iteracjach. Wygląda na to, że interfejs użytkownika nie jest również przerysowywany. - Ostatecznym rozwiązaniem, które znalazłem w Internecie (ale nie udało mi się w pełni wdrożyć), jest użycie metody
waitForIdleSync()
zaraz posetRequestedOrientation()
.waitForIdleSync()
jest częścią klasy Instrumentation i myślę, że jest to zrobione tylko do testowania, a nie do standardowego pakietu .apk.
Wszelkie pomysły byłyby naprawdę mile widziane. Będę naprawdę wdzięczny za pomoc.