Interfejs Screen Wake Lock API umożliwia zapobieganie przyciemnianiu i blokowaniu ekranu na urządzeniach, gdy aplikacja musi nieprzerwanie działać.
Czym jest interfejs Screen Wake Lock API?
Aby uniknąć rozładowywania baterii, większość urządzeń szybko przechodzi w tryb uśpienia, gdy jest nieaktywna. W większości przypadków jest to dobre rozwiązanie, ale niektóre aplikacje muszą nie wygaszać ekranu, aby dokończyć pracę. Mogą to być na przykład aplikacje kulinarne, które pokazują kroki przepisu, lub gry takie jak łamigłówka balowa, która do wprowadzania danych używa interfejsów API ruchu urządzenia.
Interfejs Screen Wake Lock API uniemożliwia przyciemnianie i blokowanie ekranu przez urządzenie. Umożliwia ona tworzenie nowych funkcji, które do tej pory wymagały aplikacji na konkretnej platformie.
Interfejs Screen Wake Lock API ogranicza konieczność stosowania intrygujących i potencjalnie wymagających rozwiązań. Eliminuje on wady starszych interfejsów API, które służyły tylko do utrzymywania włączonego ekranu i generowały wiele problemów z bezpieczeństwem i prywatnością.
Sugerowane przypadki użycia interfejsu API Screen Wake Lock API
Idealnym rozwiązaniem była aplikacja internetowa RioRun (opracowana przez The Guardian), która nie jest już dostępna. Aplikacja zabierze Cię w wirtualną wycieczkę audio po Rio, po trasie maratonu olimpijskiego w 2016 roku. Bez blokad uśpienia ekrany użytkowników często wyłączały się podczas odtwarzania wycieczki, co utrudniało korzystanie z nich.
Oczywiście istnieje też wiele innych zastosowań:
- Aplikacja z przepisami, która nie wyłącza ekranu podczas pieczenia ciasta lub przygotowywania kolacji
- karta pokładowa lub aplikacja biletowa, która pozostawa włączony ekran, dopóki kod kreskowy nie zostanie zeskanowany.
- Aplikacja przypominająca kiosk, która nieprzerwanie utrzymuje włączony ekran
- Internetowa aplikacja do prezentacji, która utrzymuje ekran włączony podczas prezentacji
Obecny stan,
Step | Stan |
---|---|
1. Utwórz wyjaśnienie | Nie dotyczy |
2. Utwórz wstępną wersję roboczą specyfikacji | Zakończono |
3. Zbieraj opinie i ulepszaj projekt | Zakończono |
4. Testowanie origin | Ukończono |
5. Uruchom | Zakończono |
Korzystanie z interfejsu Screen Wake Lock API
Rodzaje blokad uśpienia
Interfejs Screen Wake Lock API oferuje obecnie tylko jeden typ blokady uśpienia: screen
.
Blokada uśpienia screen
Blokada uśpienia screen
zapobiega wyłączeniu ekranu urządzenia, dzięki czemu użytkownik widzi informacje wyświetlane na ekranie.
Otrzymywanie blokady wybudzania ekranu
Aby zażądać blokady uśpienia ekranu, musisz wywołać metodę navigator.wakeLock.request()
, która zwraca obiekt WakeLockSentinel
.
Przekazujesz tej metody wymagany typ blokady uśpienia jako parametr. Obecnie jest on ograniczony tylko do 'screen'
, więc jest opcjonalny.
Przeglądarka może odrzucić żądanie z różnych powodów (np. dlatego, że poziom naładowania baterii jest zbyt niski), więc warto umieścić wywołanie instrukcją try…catch
.
Komunikat dotyczący wyjątku będzie zawierał więcej informacji na wypadek niepowodzenia.
Zwalnianie blokady wybudzania ekranu
Potrzebujesz też sposobu na odblokowanie blokady wybudzania ekranu. Jest to możliwe przez wywołanie metody release()
obiektu WakeLockSentinel
.
Jeśli nie zapiszesz odwołania do WakeLockSentinel
, nie możesz ręcznie
zwolnić blokady, ale nastąpi to, gdy bieżąca karta stanie się niewidoczna.
Jeśli chcesz automatycznie wyłączyć blokadę uśpienia ekranu po upływie określonego czasu, możesz użyć polecenia window.setTimeout()
, aby wywołać 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
zawiera właściwość released
, która wskazuje, czy czujnik został już zwolniony.
Jego wartość to początkowo false
, a po wysłaniu zdarzenia "release"
zmienia się na true
. Ta usługa pomaga programistom stron internetowych dowiedzieć się,
kiedy został zdjęty blokada, dzięki czemu nie muszą śledzić tego ręcznie.
Jest ona dostępna od Chrome 87.
Cykl życia blokady uśpienia ekranu
Gdy grasz w prezentację dotyczącą blokady wybudzania ekranu, zauważysz, że blokada wybudzania ekranu uwzględnia widoczność strony. Oznacza to, że blokada uśpienia ekranu będzie wyzwalana automatycznie po zminimalizowaniu karty lub okna albo po przełączeniu się z karty lub okna z aktywną blokadą wybudzania ekranu.
Aby ponownie uzyskać blokadę wybudzania ekranu, posłuchaj zdarzenia visibilitychange
i poproś o nową blokadę wybudzania ekranu, gdy się pojawi:
const handleVisibilityChange = async () => {
if (wakeLock !== null && document.visibilityState === 'visible') {
await requestWakeLock();
}
};
document.addEventListener('visibilitychange', handleVisibilityChange);
Minimalizowanie wpływu na zasoby systemowe
Czy warto używać w aplikacji blokady wybudzania ekranu? Sposób, który należy zastosować, zależy od potrzeb aplikacji. Niezależnie od tego warto użyć najprostszego rozwiązania, które pozwoli aplikacji zminimalizować jej wpływ na zasoby systemowe.
Zanim dodasz do swojej aplikacji blokadę uśpienia ekranu, zastanów się, czy w Twoich przypadkach nie da się zastosować jednego z tych alternatywnych rozwiązań:
- Jeśli pobieranie Twojej aplikacji trwa długo, rozważ użycie pobierania w tle.
- Jeśli Twoja aplikacja synchronizuje dane z serwera zewnętrznego, rozważ użycie synchronizacji w tle.
Pokaz
Zapoznaj się z prezentacją funkcji Blokada wybudzania ekranu i źródłem demonstracyjnym. Zwróć uwagę, że blokada wybudzania ekranu jest wyzwalana automatycznie, gdy przełączasz karty lub aplikacje.
Blokady wybudzania ekranu w menedżerze zadań systemu operacyjnego
Przy użyciu menedżera zadań systemu operacyjnego możesz sprawdzić, czy aplikacja nie blokuje komputera w trybie uśpienia. Film poniżej przedstawia Monitor aktywności w systemie macOS, który wskazuje, że Chrome ma aktywną blokadę wybudzania ekranu, która utrzymuje system w trybie uśpienia.
Prześlij opinię
Grupa społecznościowa inkubatora platform internetowych (WICG) i zespół Chrome chcą poznać Twoje opinie i doświadczenia związane z interfejsem Screen Wake Lock API.
Opowiedz nam o projekcie interfejsu API
Czy jest coś, co nie działa w interfejsie API zgodnie z oczekiwaniami? A może brakuje metod lub właściwości, których potrzebujesz do realizacji swojego pomysłu?
- Zgłoś problem ze specyfikacją w repozytorium Screen Wake Lock API na GitHubie lub zgłoś problem związany ze specyfikacją.
Zgłoś problem z implementacją
Czy wystąpił błąd związany z implementacją przeglądarki Chrome? A może implementacja różni się od specyfikacji?
- Zgłoś błąd na stronie https://new.crbug.com. Podaj jak najwięcej szczegółów, podaj proste instrukcje odtworzenia błędu i ustaw wartość Komponenty na
Blink>WakeLock
. Glitch to świetny sposób na udostępnianie szybkich i łatwych replik.
Pokaż obsługę interfejsu API
Czy zamierzasz użyć interfejsu Screen Wake Lock API? Publiczna pomoc pomaga zespołowi Chrome priorytetowo traktować funkcje i pokazuje innym dostawcom przeglądarek, jak ważne jest ich wsparcie.
- W wątku WICG Discourse opisz, jak zamierzasz korzystać z interfejsu API.
- Wyślij tweeta na adres @ChromiumDev, używając hashtagu
#WakeLock
, i daj nam znać, gdzie i w jaki sposób go używasz.
Przydatne linki
- Specyfikacja Rekomendacja dla kandydatów | Wersja robocza
- Wersja demonstracyjna blokady wybudzania ekranu | Źródło wersji demonstracyjnej funkcji wybudzania ekranu
- Śledzenie błędów
- Wpis na ChromeStatus.com
- Eksperymenty z interfejsem Wake Lock API
- Komponent Blink:
Blink>WakeLock
Podziękowania
Baner powitalny, którego autorem jest Kate Stone Matheson w Unsplash. Film z menedżerem zadań – Henry Lim.