Moja główna aktywność zawiera kod, który wprowadza pewne zmiany w bazie danych, których nie należy przerywać. Wykonuję ciężkie podnoszenie w innym wątku i używam okna dialogowego postępu, które ustawiłem jako nieodwołalne. Zauważyłem jednak, że jeśli obrócę telefon, ponownie uruchomię działanie, które jest NAPRAWDĘ szkodliwe dla uruchomionego procesu, i otrzymuję opcję Force Close.
To, co chcę zrobić, to programowo wyłączać zmiany orientacji ekranu do czasu zakończenia mojego procesu, kiedy to zmiany orientacji są włączone.
android
screen-orientation
android-orientation
Christopher Perry
źródło
źródło
Odpowiedzi:
Jak wyjaśnił Chris w swojej odpowiedzi , dzwoniąc
i wtedy
naprawdę działa jak urok ... na prawdziwych urządzeniach!
Nie myśl, że jest zepsuty podczas testowania na emulatorze, skrót ctrl + F11 ZAWSZE zmienia orientację ekranu, bez emulowania ruchów czujników.
EDYCJA: to nie była najlepsza możliwa odpowiedź. Jak wyjaśniono w komentarzach, istnieją problemy z tą metodą. Prawdziwa odpowiedź jest tutaj .
źródło
ActivityInfo.SCREEN_ORIENTATION_SENSOR
nie respektuje natywnej blokady orientacji Androida. Resetowanie orientacji doActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
robi.Żadna z pozostałych odpowiedzi nie okazała się dla mnie idealna, ale oto co znalazłem.
Zablokuj orientację na bieżącą ...
Gdy zmiana orientacji powinna być ponownie dozwolona, przywróć domyślną ...
źródło
Configuration.ORIENTATION_PORTRAIT
zostanie zwrócony w obu trybach poziomych (tj. „Normalny” i odwrócony). Więc jeśli telefon jest w odwróconej orientacji poziomej i ustawisz go naActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
to, odwróci się do góry nogami. W API 9 ActivityInfo wprowadzaSCREEN_ORIENTATION_REVERSE_LANDSCAPE
stałą, ale nie widzę sposobu na wykrycie takiej orientacji poprzezConfiguration
klasę.Oto bardziej kompletne i aktualne rozwiązanie, które działa dla API 8+, działa w odwróconym pionie i poziomie oraz działa na karcie Galaxy, gdzie „naturalna” orientacja to pozioma (wywołanie w
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
celu odblokowania orientacji):źródło
static
i dodaćActivity activity
jako parametr.Aby zarządzać także trybami odwróconej orientacji, użyłem tego kodu do ustalenia orientacji aktywności:
I aby ponownie pozwolić na orientację:
źródło
Służy
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
do blokowania bieżącej orientacji, czy to poziomej, czy pionowej.Służy
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
do odblokowania orientacji.źródło
Znalazłem odpowiedź. Aby to zrobić, w działaniu możesz wywołać
setRequestedOrientation(int)
jedną z wartości określonych tutaj: http://developer.android.com/reference/android/R.attr.html#screenOrientationZanim wyrzuciłem wątek, zadzwoniłem
setRequestedOrientation(OFF)
(OFF = nosensor), a po zakończeniu wątku zadzwoniłemsetRequestedOrientation(ON)
(ON = czujnik). Działa jak marzenie.źródło
Dziękuje wszystkim. Zmodyfikowałem rozwiązanie Pilota_51, aby mieć pewność, że przywróciłem poprzedni stan. Dodałem również zmianę, aby obsługiwać ekrany inne niż poziome i nie-portretowe (ale nie testowałem tego na takim ekranie).
Następnie, aby go przywrócić
źródło
switch
chociaż.źródło
Oto rozwiązanie, które działa za każdym razem i zachowuje aktualną orientację (
Activity.Info.SCREEN_ORIENTATION_PORTRAIT
na przykład przy użyciu ustawień na 0 °, ale użytkownik może mieć orientację 180 ° jako bieżącą).źródło
użyj,
ActivityInfo.SCREEN_ORIENTATION_USER
jeśli chcesz obrócić ekran tylko wtedy, gdy jest włączony na urządzeniu.źródło
To działa doskonale dla mnie. Rozwiązuje problem z inną "naturalną orientacją" tabletu / telefonu;)
źródło
Wymyśliłem rozwiązanie, które polega na obrocie wyświetlacza, a następnie decyduje o orientacji urządzenia. Znając orientację, możemy ją zablokować i zwolnić później, gdy zajdzie taka potrzeba. To rozwiązanie może również określić, czy urządzenie jest w trybie odwróconego krajobrazu .
Później, jeśli potrzebujemy zwolnić orientację, możemy nazwać tę metodę:
źródło
Myślę, że ten kod jest łatwiejszy do odczytania.
źródło
Odkryłem, że aby objąć cztery możliwości, potrzebna jest kombinacja istniejących wartości obrotu / orientacji; istnieją wartości portretowe / krajobrazowe i naturalna orientacja urządzenia. Załóżmy, że naturalna orientacja urządzeń będzie miała wartość obrotu równą 0 stopni, gdy ekran znajduje się w „naturalnej” orientacji pionowej lub poziomej. Podobnie, wartość obrotu będzie wynosić 90 stopni, gdy jest w orientacji poziomej lub pionowej (zauważ, że jest odwrotna do orientacji @ 0 stopni). Zatem wartości obrotu, które nie są 0 lub 90 stopni, będą oznaczać orientację „odwrotną”. OK, oto kod:
źródło
Nie podobała mi się większość odpowiedzi tutaj, ponieważ w odblokowaniu ustawili ją na NIEOKREŚLONY, w przeciwieństwie do poprzedniego stanu. ProjectJourneyman wziął to pod uwagę, co było świetne, ale wolałem kod blokujący Roya. Tak więc moja rekomendacja byłaby połączeniem tych dwóch:
źródło
Możesz użyć
źródło
użyj tej linii kodu
w swojej działalności stworzyliśmy metodę
źródło