Przed oznaczeniem tego posta jako „duplikatu” piszę ten post, ponieważ żaden inny post nie zawiera rozwiązania problemu.
Próbuję wyłączyć urządzenie, to po kilku minutach lub wymianie czujnika włącz je ponownie.
Wyłącz testy wyświetlacza
Jestem w stanie wyłączyć ekran za pomocą:
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = 0;
getWindow().setAttributes(params);
Nie udało mi się wyłączyć ekranu za pomocą metody wl.release ().
Włącz test wyświetlacza
Moje pierwsze przypuszczenie, jak następuje, nie działa. Nic się nie dzieje, ekran pozostaje wyłączony.
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = -1f;
getWindow().setAttributes(params);
Wtedy też próbowałem użyć wakelocków, ale bezskutecznie.
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "tag");
wl.acquire();
W końcu wypróbowałem następujące rozwiązania, ale bez rezultatu.
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
Podsumowując, nie pojawia się żaden błąd w konsoli dla żadnej z tych metod. Mój tekst testowy „Ekran powinien być włączony” pojawia się na ekranie, gdy włączam urządzenie przyciskiem zasilania. To pokazuje, że kod powinien był działać. Proszę o odpowiedź tylko wtedy, gdy przetestowałeś kod, wydaje się, że wiele funkcji, takich jak params.screenBrightness = -1
, nie działa tak, jak powinny zgodnie z sdk.
Odpowiedzi:
Zakładam, że chcesz, aby działało to tylko wtedy, gdy Twoja aplikacja jest na pierwszym planie.
Ten kod:
Nie wyłącza ekranu w tradycyjnym sensie. Sprawia, że ekran jest tak ciemny, jak to tylko możliwe. W standardowej platformie istnieje ograniczenie tego, jak słabo może być; jeśli twoje urządzenie faktycznie pozwala na całkowite wyłączenie ekranu, oznacza to pewną osobliwość implementacji tego urządzenia, a nie zachowanie, na które możesz liczyć na różnych urządzeniach.
W rzeczywistości używanie tego w połączeniu z FLAG_KEEP_SCREEN_ON oznacza, że nigdy nie pozwolisz na wyłączenie ekranu (a tym samym na przejście urządzenia w tryb niskiego poboru mocy), nawet jeśli dane urządzenie pozwala ustawić jasność ekranu na pełne. Miej to na uwadze. Będziesz zużywał znacznie więcej energii, niż gdyby ekran był naprawdę wyłączony.
Teraz, aby przywrócić normalną jasność ekranu, wystarczy ustawić wartość jasności:
Nie potrafię wyjaśnić, dlaczego to nie zastąpiłoby wcześniej ustawionej wartości 0. W ramach testu możesz spróbować wprowadzić wymuszoną pełną jasność, aby wymusić tę konkretną jasność:
To zdecydowanie działa. Na przykład aplikacje Książki Google wykorzystują to, aby ustawić jasność ekranu na przyciemnienie podczas korzystania z książki, a następnie powrócić do normalnej jasności po wyłączeniu.
Aby ułatwić debugowanie, możesz użyć „adb shell dumpsys window”, aby zobaczyć aktualny stan okna. W danych dla twojego okna, pokaże ci bieżące LayoutParams, które zostały dla niego ustawione. Upewnij się, że wartość, o której myślisz, faktycznie istnieje.
I znowu FLAG_KEEP_SCREEN_ON to osobna koncepcja; to i jasność nie mają na siebie bezpośredniego wpływu. (I nie byłoby powodu, aby ponownie ustawiać flagę podczas cofania jasności, gdybyś już ją ustawił, ustawiając jasność na 0. Flaga pozostanie ustawiona, dopóki jej nie zmienisz).
źródło
Napisałem tę metodę, aby włączyć ekran po zablokowaniu ekranu. U mnie działa idealnie. Spróbuj-
I wywołaj tę metodę z
onResume()
.źródło
Sugerowałbym ten:
Flaga ACQUIRE_CAUSES_WAKEUP jest wyjaśniona w ten sposób:
Upewnij się również, że masz następujące uprawnienia w pliku AndroidManifewst.xml:
źródło
Cześć, mam nadzieję, że to pomoże:
źródło
PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK
która wyłącza ekran tylko wtedy, gdy czujnik zbliżeniowy jest w stanie „blisko”.PROXIMITY_SCREEN_OFF_WAKE_LOCK
zwolnię blokadę oczekiwania, ekran ponownie się włączy. Jak temu zapobiec?// Plik manifestu użytkownika
źródło
Czy na pewno poprosiłeś o odpowiednie pozwolenie w swoim pliku manifestu?
Możesz użyć klasy AlarmManager 1, aby odpalić intencję, która rozpoczyna twoją aktywność i uzyskuje blokadę wybudzenia . Spowoduje to włączenie ekranu i utrzymanie go. Zwolnienie wakelocka pozwoli urządzeniu na samodzielne zaśnięcie.
Możesz również rzucić okiem na użycie PowerManagera, aby ustawić urządzenie w tryb uśpienia: http://developer.android.com/reference/android/os/PowerManager.html#goToSleep(long)
źródło
Najlepszy sposób na zrobienie tego (przy użyciu zrootowanych urządzeń):
Teraz mamy dwie funkcje:
I to:
Przepraszam za mój zły angielski.
źródło
Oto udany przykład implementacji tego samego na urządzeniu obsługującym niższe wartości jasności ekranu (testowałem na 7-calowym tablecie Allwinner z chińskim interfejsem API15).
Jeśli ktoś inny to wypróbuje, proszę o komentarz poniżej, czy zadziałało / nie działało, a urządzenie, Android API.
źródło
Aby ekran był włączony:
Powrót do domyślnego trybu ekranu: po prostu wyczyść flagę FLAG_KEEP_SCREEN_ON
źródło
To działa na Marshmallow
źródło
Jeśli chodzi o dokumentację Androida, można to osiągnąć za pomocą następującej linii kodu:
Dodałem to do mojej
onCreate
metody i działa dobrze.W linku znajdziesz różne sposoby osiągnięcia tego, a także ogólne wyjaśnienie.
Link do dokumentacji: https://developer.android.com/training/scheduling/wakelock.html
źródło
Jeśli Twoja aplikacja jest aplikacją systemową, możesz użyć PowerManager.goToSleep (), aby wyłączyć ekran, potrzebujesz specjalnego pozwolenia
zanim użyjesz goToSleep (), musisz użyć refleksji, tak jak:
Teraz możesz użyć goToSleep (), aby wyłączyć ekran.
źródło
Po prostu dodaj
albo zadzwoń
na widok rodziców.
źródło
Nie miałbym nadziei na „przebudzenie ekranu” podczas zajęć. Jeśli ekran jest wyłączony, działanie jest prawdopodobnie wstrzymane i nie powinno uruchamiać żadnego kodu.
Po przebudzeniu pojawia się problem z blokadą ekranu. Nie wiem, jak jakakolwiek aplikacja może automatycznie ominąć blokadę ekranu.
Powinieneś rozważyć uruchomienie zadań w tle w usłudze, a następnie użycie menedżera powiadomień do wysłania powiadomienia, gdy cokolwiek zostanie wykryte. Powiadomienie powinno dostarczać pewnego rodzaju alertu urządzenia (wybudzenie ekranu, ikona powiadomienia, dioda powiadomienia itp.). Po kliknięciu powiadomienia może uruchomić chęć rozpoczęcia Twojej aktywności.
Możesz także spróbować rozpocząć aktywność bezpośrednio z usługi, ale naprawdę nie wiem, czy to włączy ekran, czy obejdzie blokadę ekranu.
źródło
Zgodnie z Android API 28 i nowszym, musisz wykonać następujące czynności, aby włączyć ekran
źródło
Wypróbowałem wszystkie powyższe rozwiązania, ale żadne nie zadziałało. więc wyszukałem w Google i znalazłem poniżej rozwiązania. Próbowałem i zadziałało.
https://www.tutorialspoint.com/how-to-turn-android-device-screen-on-and-off-programmatically
jeśli jest jakaś sugestia, proszę ją podać
źródło