Interfejs API blokady uśpienia ekranu umożliwia zapobieganie przyciemnianiu ani blokowaniu ekranu przez urządzenia, gdy aplikacja musi nieprzerwanie działać.
Co to jest interfejs Screen Wake Lock API?
Większość urządzeń szybko przechodzi w stan uśpienia, gdy jest bezczynna, aby uniknąć szybkiego rozładowywania się baterii. W większości przypadków nie ma to znaczenia, ale niektóre aplikacje muszą mieć włączony ekran, aby działać prawidłowo. Przykładami takich aplikacji są aplikacje kulinarne, które pokazują kroki do wykonania przepisu, lub gra Ball Puzzle, która do wprowadzania danych korzysta z interfejsów API ruchu urządzenia.
Interfejs Screen Wake Lock API umożliwia zapobieganie przyciemnianiu i blokowaniu ekranu. Ta funkcja umożliwia tworzenie nowych funkcji, które do tej pory wymagały aplikacji na daną platformę.
Interfejs API blokady uśpienia ekranu eliminuje potrzebę stosowania wątpliwych i potencjalnie energochłonnych obejść. Rozwiązanie to eliminuje wady starszego interfejsu API, który ograniczał się do włączania ekranu i miało wiele problemów z bezpieczeństwem oraz prywatnością.
Sugerowane przypadki użycia interfejsu Screen Wake Lock API
RioRun, aplikacja internetowa opracowana przez The Guardian, była idealnym przykładem zastosowania (chociaż nie jest już dostępna). Ta aplikacja zabierze Cię na wirtualny spacer po Rio, gdy pokonuje trasę maratonu olimpijskiego w 2016 roku. Bez blokady ekranu podczas odtwarzania oprowadzania ekrany użytkowników często się wyłączały, co utrudniałoby korzystanie z aplikacji.
Oczywiście istnieje wiele innych zastosowań:
- Aplikacja z przepisami, która utrzymuje ekran włączony podczas pieczenia ciasta lub gotowania obiadu.
- Aplikacja karty pokładowej lub biletu, która utrzymuje ekran włączony do momentu zeskanowania kodu kreskowego.
- Aplikacja w stylu kiosku, która utrzymuje ekran zawsze włączony
- Internetowa aplikacja do prezentacji, która ma włączony ekran podczas prezentacji.
Obecny stan,
Krok | Stan |
---|---|
1. Tworzenie wyjaśnienia | Nie dotyczy |
2. Tworzenie wstępnej wersji specyfikacji | Zakończono |
3. Zbieraj opinie i ulepszaj projekt | Zakończono |
4. Wersja próbna origin | Zakończone |
5. Uruchom | Zakończono |
Korzystanie z interfejsu Screen Wake Lock API
Typy blokad uśpienia
Interfejs API Screen Wake Lock obsługuje obecnie tylko jeden typ blokady ekranu: screen
.
screen
blokada uśpienia
Blokada aktywacji screen
uniemożliwia wyłączenie ekranu urządzenia, aby użytkownik mógł widzieć wyświetlane informacje.
Ustawianie blokady uśpienia ekranu
Aby zablokować ekran, musisz wywołać metodę navigator.wakeLock.request()
, która zwraca obiekt WakeLockSentinel
.
Jako parametr przekazujesz tę metodę odpowiedniego typu blokady uśpienia, który obecnie ma ograniczenie tylko do 'screen'
i dlatego jest opcjonalny.
Przeglądarka może odrzucić żądanie z różnych powodów (np.
ponieważ poziom naładowania baterii jest za niski),
dlatego dobrze jest owinąć wywołanie w oświadczeniu try…catch
.
Wiadomość o wyjątku będzie zawierać więcej informacji na wypadek niepowodzenia.
Zwalnianie blokady uśpienia ekranu
Musisz też mieć możliwość odblokowania ekranu, co można osiągnąć, wywołując metodę release()
obiektu WakeLockSentinel
.
Jeśli nie przechowujesz odwołania do WakeLockSentinel
, nie możesz ręcznie odblokować karty, ale zostanie ona odblokowana, gdy bieżąca karta stanie się niewidoczna.
Jeśli chcesz automatycznie wyłączać blokadę wybudzania ekranu po upływie określonego czasu, możesz użyć window.setTimeout()
do wywołania funkcji release()
, jak pokazano w poniższym przykładzie.
// The wake lock sentinel.
let wakeLock = null;
// Function that attempts to request a screen wake lock.
const requestWakeLock = async () => {
try {
wakeLock = await navigator.wakeLock.request();
wakeLock.addEventListener('release', () => {
console.log('Screen Wake Lock released:', wakeLock.released);
});
console.log('Screen Wake Lock released:', wakeLock.released);
} catch (err) {
console.error(`${err.name}, ${err.message}`);
}
};
// Request a screen wake lock…
await requestWakeLock();
// …and release it again after 5s.
window.setTimeout(() => {
wakeLock.release();
wakeLock = null;
}, 5000);
Obiekt WakeLockSentinel
ma właściwość released
, która wskazuje, czy strażnik został już zwolniony.
Jego wartość początkowo wynosi false
, a po wysłaniu zdarzenia "release"
zmienia się na true
. Ta właściwość pomaga deweloperom witryn internetowych wiedzieć, kiedy blokada została zwolniona, dzięki czemu nie muszą śledzić tego ręcznie.
Jest ona dostępna w Chrome 87.
Cykl życia blokady uśpienia ekranu
Gdy będziesz korzystać z demo blokady ekranu, zauważysz, że blokady ekranu są wrażliwe na widoczność strony. Oznacza to, że blokada uśpienia ekranu zostanie automatycznie wyłączona, gdy zminimalizujesz kartę lub okno albo przełączysz się z karty lub okna, w których blokada jest aktywna.
Aby ponownie uzyskać blokadę uśpienia ekranu, nasłuchuj zdarzenia visibilitychange
i pros o nową blokadę uśpienia ekranu, gdy wystąpią:
const handleVisibilityChange = async () => {
if (wakeLock !== null && document.visibilityState === 'visible') {
await requestWakeLock();
}
};
document.addEventListener('visibilitychange', handleVisibilityChange);
Minimalizowanie wpływu na zasoby systemu
Czy w aplikacji należy używać blokady ekranu? Sposób, w jaki to zrobisz, zależy od potrzeb aplikacji. W każdym razie powinieneś zastosować jak najmniejsze możliwe podejście, aby zminimalizować wpływ aplikacji na zasoby systemowe.
Zanim dodasz do aplikacji funkcję blokady ekranu, zastanów się, czy nie można zrealizować Twojego przypadku użycia za pomocą jednego z tych alternatywnych rozwiązań:
- Jeśli Twoja aplikacja wykonuje długotrwałe pobieranie, rozważ użycie pobierania w tle.
- Jeśli Twoja aplikacja synchronizuje dane z zewnętrznego serwera, rozważ użycie synchronizacji w tle.
Prezentacja
Zapoznaj się z prezentacją funkcji Screen Wake Lock i jej źródłem. Zwróć uwagę, że blokada wybudzania ekranu jest automatycznie zwalniana po przełączeniu kart lub aplikacji.
Blokady uśpienia ekranu w menedżerze zadań systemu
Aby sprawdzić, czy aplikacja nie blokuje komputerowi przechodzenia w stan uśpienia, możesz użyć menedżera zadań systemu operacyjnego. Poniższy film przedstawia Monitor aktywności macOS, który wskazuje, że Chrome ma aktywną blokadę uśpienia ekranu, która utrzymuje system w stanie czuwania.
Prześlij opinię
Grupa Web Platform Incubator Community Group (WICG) i zespół Chrome chcą poznać Twoje opinie i wrażenia związane z interfejsem API blokady ekranu.
Prześlij informacje o projektowaniu interfejsu API
Czy interfejs API nie działa zgodnie z oczekiwaniami? A może brakuje metod lub właściwości, których potrzebujesz, aby zrealizować swój pomysł?
- Zgłoś problem ze specyfikacją w gałęzi interfejsu Screen Wake Lock API na GitHubie lub dodaj swoje uwagi do istniejącego problemu.
Zgłaszanie problemów z implementacją
Czy znalazłeś/znalazłaś błąd w implementacji Chrome? Czy implementacja różni się od specyfikacji?
- Zgłoś błąd na stronie https://new.crbug.com. Podaj jak najwięcej szczegółów, dołącz proste instrukcje odtwarzania błędu i ustaw wartość Components na
Blink>WakeLock
. Glitch to świetne narzędzie do szybkiego i łatwego udostępniania reprosów.
Pokaż wsparcie dla interfejsu API
Zamierzasz używać interfejsu Screen Wake Lock API? Twoja publiczna pomoc pomaga zespołowi Chrome ustalać priorytety funkcji i pokazuje innym dostawcom przeglądarek, jak ważne jest ich wsparcie.
- W tym wątku na forum Discourse dotyczącego WCG opisz, jak planujesz używać interfejsu API.
- Wyślij tweeta do @ChromiumDev, używając hashtaga
#WakeLock
, i podaj, gdzie i jak go używasz.
Przydatne linki
- Specyfikacja Rekomendacja kandydata | Wersja robocza edytora
- Wersja demonstracyjna blokady wybudzania ekranu | Źródło demonstracyjne blokady wybudzania ekranu
- Śledzenie błędu
- Wpis na temat ChromeStatus.com
- Eksperymentowanie z interfejsem Wake Lock API
- Składnik Blink:
Blink>WakeLock
Podziękowania
Baner powitalny autorstwa Kate Stone Matheson z Unsplash. Film przedstawiający menedżera zadań dzięki uprzejmości Henry'ego Lima.