با Screen Wake Lock API بیدار بمانید

منتشر شده: ۱۸ دسامبر ۲۰۱۸

Browser Support

  • کروم: ۸۴.
  • لبه: ۸۴.
  • فایرفاکس: ۱۲۶.
  • سافاری: ۱۶.۴

Source

API قفل بیدارباش صفحه نمایش چیست؟

برای جلوگیری از خالی شدن باتری، اکثر دستگاه‌ها وقتی بیکار می‌مانند، به سرعت به حالت خواب می‌روند. اگرچه این حالت در بیشتر مواقع خوب است، اما برخی از برنامه‌ها برای تکمیل کار خود نیاز دارند که صفحه نمایش را روشن نگه دارند. به عنوان مثال می‌توان به برنامه‌های آشپزی که مراحل یک دستور غذا را نشان می‌دهند یا بازی‌ای مانند Ball Puzzle که از APIهای حرکتی دستگاه برای ورودی استفاده می‌کند، اشاره کرد.

رابط برنامه‌نویسی کاربردی قفل بیداری صفحه (Screen Wake Lock API) راهی برای جلوگیری از کم‌نور شدن و قفل شدن صفحه نمایش دستگاه فراهم می‌کند. این قابلیت، تجربیات جدیدی را امکان‌پذیر می‌کند که تاکنون به یک برنامه خاص برای پلتفرم نیاز داشتند.

رابط برنامه‌نویسی کاربردی قفل بیدار شدن صفحه نمایش (Screen Wake Lock API) نیاز به راه‌حل‌های هک‌شده و بالقوه پرمصرف را کاهش می‌دهد. این رابط، کاستی‌های رابط برنامه‌نویسی کاربردی قدیمی‌تر را که محدود به روشن نگه داشتن صفحه نمایش بود و تعدادی مشکل امنیتی و حریم خصوصی داشت، برطرف می‌کند.

موارد استفاده پیشنهادی برای API قفل بیداری صفحه نمایش

RioRun ، یک اپلیکیشن تحت وب که توسط گاردین توسعه داده شده بود، یک مورد استفاده عالی بود (هرچند دیگر در دسترس نیست). این اپلیکیشن شما را به یک تور صوتی مجازی از ریو می‌برد و مسیر ماراتن المپیک ۲۰۱۶ را دنبال می‌کند. بدون قفل بیدارباش، صفحه نمایش کاربران هنگام پخش تور مرتباً خاموش می‌شد و استفاده از آن را دشوار می‌کرد.

البته موارد استفاده فراوان دیگری نیز وجود دارد:

  • یک برنامه دستور غذا که هنگام پخت کیک یا شام، صفحه را روشن نگه می‌دارد
  • اپلیکیشن کارت پرواز یا بلیط که صفحه را تا زمان اسکن بارکد روشن نگه می‌دارد
  • یک برنامه به سبک کیوسک که صفحه نمایش را به طور مداوم روشن نگه می‌دارد
  • یک برنامه ارائه مبتنی بر وب که صفحه را در طول ارائه روشن نگه می‌دارد

از API قفل بیدارباش صفحه استفاده کنید

API قفل بیداری صفحه نمایش فقط یک نوع قفل بیداری ارائه می‌دهد: screen .

قفل بیدار شدن از خواب screen

قفل بیدارباش screen از خاموش شدن صفحه نمایش دستگاه جلوگیری می‌کند تا کاربر بتواند اطلاعات نمایش داده شده روی صفحه را ببیند.

قفل بیدارباش صفحه نمایش را فعال کنید

برای درخواست قفل بیدارباش صفحه نمایش، باید متد navigator.wakeLock.request() را فراخوانی کنید که یک شیء WakeLockSentinel را برمی‌گرداند. به صورت اختیاری، می‌توانید نوع screen به عنوان پارامتر ارسال کنید. مرورگر می‌تواند به دلایل مختلف درخواست را رد کند (به عنوان مثال، به دلیل اینکه سطح شارژ باتری خیلی پایین است)، بنابراین بهتر است که فراخوانی را در یک دستور try...catch قرار دهید. پیام استثنا شامل جزئیات بیشتری در صورت عدم موفقیت است.

قفل بیدارباش صفحه را آزاد کنید

همچنین به روشی برای آزاد کردن قفل بیدار شدن صفحه نیاز دارید که با فراخوانی متد release() از شیء WakeLockSentinel امکان‌پذیر است. اگر ارجاعی به WakeLockSentinel ذخیره نکنید، هیچ راهی برای آزاد کردن دستی قفل وجود ندارد، اما به محض اینکه تب فعلی نامرئی شود، آزاد خواهد شد.

اگر می‌خواهید قفل بیدارباش صفحه نمایش پس از گذشت مدت زمان مشخصی به طور خودکار آزاد شود، می‌توانید window.setTimeout() برای فراخوانی release() استفاده کنید، همانطور که در مثال نشان داده شده است.

// 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 دارای خاصیتی به نام released است که نشان می‌دهد آیا یک sentinel قبلاً آزاد شده است یا خیر. مقدار آن در ابتدا false است و پس از ارسال رویداد "release" به true تغییر می‌کند. این خاصیت به توسعه‌دهندگان وب کمک می‌کند تا بدون ردیابی دستی، بدانند چه زمانی یک قفل آزاد شده است.

چرخه عمر قفل بیدار شدن از خواب صفحه نمایش

وقتی با نسخه آزمایشی قفل بیدارباش صفحه کار می‌کنید، می‌توانید ببینید که قفل‌های بیدارباش صفحه به میزان دید صفحه حساس هستند. این بدان معناست که وقتی یک تب یا پنجره را کوچک می‌کنید یا از تب یا پنجره‌ای که قفل بیدارباش صفحه در آن فعال است خارج می‌شوید، قفل بیدارباش صفحه به‌طور خودکار آزاد می‌شود.

برای دریافت مجدد قفل بیداری صفحه، به رویداد visibilitychange گوش دهید و در صورت وقوع، قفل بیداری صفحه جدیدی درخواست کنید:

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

document.addEventListener('visibilitychange', handleVisibilityChange);

به حداقل رساندن تأثیر خود بر منابع سیستم

آیا باید از قفل بیدارباش صفحه در برنامه خود استفاده کنید؟ رویکردی که شما اتخاذ می‌کنید به نیازهای برنامه شما بستگی دارد. صرف نظر از این، شما باید از سبک‌ترین رویکرد ممکن برای برنامه خود استفاده کنید تا تأثیر آن بر منابع سیستم به حداقل برسد.

قبل از افزودن قفل بیدارباش صفحه به برنامه خود، در نظر بگیرید که آیا موارد استفاده شما با یکی از راه‌حل‌های جایگزین زیر قابل حل است یا خیر:

نسخه آزمایشی

نسخه آزمایشی و منبع آزمایشی قفل بیدارباش صفحه را بررسی کنید. توجه کنید که چگونه قفل بیدارباش صفحه هنگام تغییر تب‌ها یا برنامه‌ها به طور خودکار فعال می‌شود.

قفل بیدار شدن صفحه نمایش در مدیریت وظایف سیستم عامل

می‌توانید از مدیر وظیفه سیستم عامل خود استفاده کنید تا ببینید آیا برنامه‌ای مانع از به خواب رفتن رایانه شما می‌شود یا خیر. این ویدیو، مانیتور فعالیت macOS را نشان می‌دهد که نشان می‌دهد کروم دارای قفل بیدارباش صفحه فعال است که سیستم را بیدار نگه می‌دارد.

بازخورد

آیا در پیاده‌سازی کروم اشکالی پیدا کردید؟ یا پیاده‌سازی با مشخصات متفاوت است؟

  • یک اشکال (باگ) ثبت کنید . تا جایی که می‌توانید جزئیات را ذکر کنید. دستورالعمل‌های واضحی برای تولید مجدد اشکال ارائه دهید و Components را روی Blink>WakeLock تنظیم کنید.

منابع

تقدیرنامه‌ها

ویدیوی مدیریت وظایف با حسن نیت از هنری لیم .