Ekran Uyandırma Kilidi API'si ile uyanık kalma

Ekran Uyanık Kalma Kilidi API'si, bir uygulamanın çalışmaya devam etmesi gerektiğinde cihazların ekranının kararmasını veya kilitlenmesini engellemenin bir yolunu sağlar.

Screen Wake Lock API nedir?

Çoğu cihaz boşta kaldığında pilin boşalmasını önlemek için hızlı bir şekilde uyku moduna geçer. Bu durum çoğu zaman sorun oluşturmasa da bazı uygulamaların çalışmalarını tamamlayabilmesi için ekranın açık kalması gerekir. Tarif adımlarını gösteren yemek pişirme uygulamaları veya giriş için cihaz hareketi API'lerini kullanan Ball Puzzle gibi oyunlar bu kapsamdadır.

Screen Wake Lock API, cihazın kararmasını ve ekranı kilitlemesini önlemenin bir yolunu sunar. Bu özellik, şu ana kadar platforma özgü uygulamalar gerektiren yeni deneyimler sunulmasına olanak tanıyor.

Ekran Uyanık Kalma Kilidi API'si, hack'lenmiş ve potansiyel olarak çok fazla güç tüketen geçici çözümlere olan ihtiyacı azaltır. Yalnızca ekranı açık tutmakla sınırlı olan ve çeşitli güvenlik ve gizlilik sorunları olan eski bir API'nin eksikliklerini giderir.

Screen Wake Lock API için önerilen kullanım alanları

The Guardian tarafından geliştirilen web uygulaması RioRun, mükemmel bir kullanım alanıydı (artık kullanılmıyor olsa da). Uygulama, sizi 2016 Olimpiyat maratonunun rotasını izleyerek Rio'da sanal bir sesli tura çıkarır. Uyanık kalma kilitleri olmadığında, tur oynatılırken kullanıcıların ekranları sık sık kapanıyordu. Bu da kullanımı zorlaştırıyordu.

Elbette başka birçok kullanım alanı vardır:

  • Pasta pişirirken veya akşam yemeği hazırlarken ekranı açık tutan bir yemek tarifi uygulaması
  • Barkod taranana kadar ekranı açık tutan bir biniş kartı veya bilet uygulaması
  • Ekranı sürekli açık tutan kiosk tarzı bir uygulama
  • Sunum sırasında ekranı açık tutan web tabanlı bir sunu uygulaması

Mevcut durum

Step Durum
1. Açıklayıcı oluşturun Yok
2. İlk spesifikasyon taslağını oluşturun Tamamlandı
3. Geri bildirim toplayın ve tasarımı tekrarlayın Tamamlandı
4. Kaynak denemesi Tamamlandı
5. Lansman Tamamlandı

Screen Wake Lock API'yi kullanma

Uyanık kalma kilidi türleri

Screen Wake Lock API şu anda yalnızca bir tür uyanma kilidi sağlar: screen.

screen uyanık kalma kilidi

screen Uyandırma kilidi, kullanıcının ekranda gösterilen bilgileri görebilmesi için cihazın ekranının kapanmasını engeller.

Ekran uyanık kalma kilidi alma

Ekran uyandırma kilidi isteğinde bulunmak için WakeLockSentinel nesnesi döndüren navigator.wakeLock.request() yöntemini çağırmanız gerekir. Bu yönteme, istenen uyanma kilidi türünü parametre olarak iletirsiniz. Bu parametre şu anda yalnızca 'screen' ile sınırlıdır ve bu nedenle isteğe bağlıdır. Tarayıcı, isteği çeşitli nedenlerle reddedebilir (örneğin, pil şarj seviyesi çok düşük olduğu için). Bu nedenle, çağrıyı bir try…catch ifadesi içine almak iyi bir uygulamadır. İstisnanın mesajı, hata durumunda daha fazla ayrıntı içerir.

Ekran uyanık kalma kilidini kaldırma

Ayrıca ekranı uyandıran kilidi kaldırmak için bir yönteme de ihtiyacınız vardır. Bu yöntem, WakeLockSentinel nesnesinin release() yöntemi çağrılarak elde edilir. WakeLockSentinel için bir referans depolamazsanız kilidi manuel olarak açamazsınız ancak geçerli sekme görünmez hale geldiğinde kilit açılır.

Belirli bir süre geçtikten sonra ekran uyandırma kilidini otomatik olarak kaldırmak istiyorsanız aşağıdaki örnekte gösterildiği gibi window.setTimeout() ile release()'i arayabilirsiniz.

// 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);

WakeLockSentinel nesnesi, bir koruyucunun zaten serbest bırakılmış olup olmadığını belirten released adlı bir özelliğe sahiptir. Başlangıçta değeri false olan bu değişken, bir "release" etkinliği gönderildikten sonra true olarak değişir. Bu özellik, web geliştiricilerin kilidin ne zaman serbest bırakıldığını bilmelerine yardımcı olur. Böylece, bunu manuel olarak takip etmeleri gerekmez. Chrome 87'den itibaren kullanılabilir.

Ekran uyanık kalma kilidi yaşam döngüsü

Ekran uyanık kalma kilidi demosu ile oynarken ekran uyanık kalma kilitlerinin sayfa görünürlüğüne duyarlı olduğunu fark edeceksiniz. Bu, bir sekmeyi veya pencereyi küçülttüğünüzde ya da ekran uyanık kalma kilidinin etkin olduğu bir sekmeden veya pencereden geçtiğinizde ekran uyanık kalma kilidinin otomatik olarak kaldırılacağı anlamına gelir.

Ekran uyanık kalma kilidini yeniden edinmek için visibilitychange etkinliğini dinleyin ve yeni bir ekran uyanık kalma kilidi isteyin:

const handleVisibilityChange = async () => {
 
if (wakeLock !== null && document.visibilityState === 'visible') {
    await requestWakeLock
();
 
}
};

document
.addEventListener('visibilitychange', handleVisibilityChange);

Sistem kaynakları üzerindeki etkinizi en aza indirin

Uygulamanızda ekran uyandırma kilidi kullanmalı mısınız? Uygulayacağınız yaklaşım, uygulamanızın ihtiyaçlarına bağlıdır. Bununla birlikte, uygulamanızın sistem kaynakları üzerindeki etkisini en aza indirmek için mümkün olan en hafif yaklaşımı kullanmalısınız.

Uygulamanıza ekran uyandırma kilidi eklemeden önce kullanım alanlarınızın aşağıdaki alternatif çözümlerden biriyle çözülüp çözülemeyeceğini değerlendirin:

Demo

Ekran Uyandırma Kilidi demosuna ve demo kaynağına göz atın. Sekmeler veya uygulamalar arasında geçiş yaptığınızda ekran uyanık kalma kilidinin otomatik olarak serbest bırakıldığına dikkat edin.

OS görev yöneticisindeki ekran uyanık kalma kilitleri

Bir uygulamanın bilgisayarınızın uykuya geçmesini engelleyip engellemediğini görmek için işletim sisteminizin görev yöneticisini kullanabilirsiniz. Aşağıdaki videoda macOS Etkinlik İzleyici, Chrome'un sistemi uyanık tutan etkin bir ekran uyanık kalma kilidine sahip olduğunu belirtmektedir.

Geri bildirim

Web Platform Incubator Community Group (WICG) ve Chrome ekibi, Screen Wake Lock API ile ilgili düşüncelerinizi ve deneyimlerinizi öğrenmek istiyor.

API tasarımı hakkında bilgi verin

API ile ilgili beklendiği gibi çalışmayan bir şey var mı? Yoksa fikrinizi uygulamak için ihtiyaç duyduğunuz yöntemler veya özellikler eksik mi?

Uygulamayla ilgili sorunları bildirme

Chrome'un uygulamasında bir hata mı buldunuz? Yoksa uygulama, spesifikasyondan farklı mı?

  • https://new.crbug.com adresinden hata kaydı oluşturun. Mümkün olduğunca fazla ayrıntı eklediğinizden, hatayı yeniden oluşturmayla ilgili basit talimatlar sağladığınızdan ve Bileşenler'i Blink>WakeLock olarak ayarladığınızdan emin olun. Glitch, hızlı ve kolay yeniden oluşturma işlemlerini paylaşmak için mükemmel bir araçtır.

API'yi destekleme

Screen Wake Lock API'yi kullanmayı planlıyor musunuz? Herkese açık desteğiniz, Chrome ekibinin özelliklere öncelik vermesine yardımcı olur ve diğer tarayıcı tedarikçi firmalarına bu özellikleri desteklemenin ne kadar önemli olduğunu gösterir.

Faydalı bağlantılar

Teşekkür ederiz

Unsplash'taki Kate Stone Matheson tarafından oluşturulan lokomotif resim. Görev yöneticisi videosu Henry Lim'e aittir.