البقاء في الوضع النشط مع واجهة برمجة التطبيقات Screen Wake Lock

توفّر واجهة برمجة التطبيقات Screen Wake Lock API طريقة لمنع الأجهزة من تعتيم الشاشة أو قفلها عندما يكون من الضروري استمرار تشغيل أحد التطبيقات.

ما هي Screen Wake Lock API؟

لتجنُّب استنزاف البطارية، تنتقل معظم الأجهزة بسرعة إلى وضع السكون عند تركها في وضع السكون. على الرغم من أنّ هذا الإجراء يكون مناسبًا في معظم الأوقات، تحتاج بعض التطبيقات إلى إبقاء الشاشة مفعّلة لإكمال عملها. وتشمل الأمثلة تطبيقات الطبخ التي تعرض خطوات وصفة طعام أو لعبة، مثل Ball Puzzle التي تستخدِم واجهات برمجة التطبيقات لرصد الحركة على الجهاز من أجل إدخال البيانات.

توفّر واجهة برمجة التطبيقات Screen Wake Lock API طريقة لمنع الجهاز من تعتيم الشاشة وقفلها. تتيح هذه الميزة تجارب جديدة كانت تتطلّب حتى الآن استخدام تطبيق خاص بالنظام الأساسي.

تعمل واجهة برمجة التطبيقات Screen Wake Lock API على تقليل الحاجة إلى استخدام الحلول البديلة التي قد تكون صعبة الاستخدام ومستهلكة للطاقة. وتعالج هذه الواجهة القصور في واجهة برمجة تطبيقات قديمة كانت تقتصر على إبقاء الشاشة مُضاءة فقط وكانت تتضمّن عددًا من مشكلات الأمان والخصوصية.

حالات الاستخدام المقترَحة لواجهة برمجة التطبيقات Screen Wake Lock API

كان RioRun، وهو تطبيق ويب طوَّرته صحيفة The Guardian، مثالاً مثاليًا على حالات الاستخدام (على الرغم من أنّه لم يعُد متاحًا). يأخذك التطبيق في جولة صوتية افتراضية في ريو دي جانيرو، على مسار الماراثون الأولمبي لعام 2016. بدون عمليات قفل التنشيط، كانت شاشات المستخدمين ستطفأ بشكل متكرر أثناء تشغيل الجولة، مما يجعل من الصعب استخدامها.

بالطبع، هناك العديد من حالات الاستخدام الأخرى:

  • تطبيق وصفات يحافظ على إضاءة الشاشة أثناء خبز كعكة أو طهي عشاء
  • تطبيق بطاقة صعود على متن الطائرة أو تذكرة يحافظ على إشعال الشاشة إلى أن يتم مسح الرمز الشريطي ضوئيًا
  • تطبيق مصمّم على شكل كشك يحافظ على تشغيل الشاشة باستمرار
  • تطبيق عروض تقديمية على الويب يحافظ على شاشة مشغّلة أثناء العرض التقديمي

الوضع الحالي

الخطوة الحالة
1. إنشاء شرح لا ينطبق
2. إنشاء مسودة أولية للمواصفة مكتمل
3- جمع الملاحظات وتحسين التصميم مكتمل
4. مرحلة التجربة والتقييم مكتملة
5- الإطلاق مكتمل

استخدام واجهة برمجة التطبيقات Screen Wake Lock API

أنواع قفل التنشيط

لا توفّر Screen Wake Lock API حاليًا سوى نوع واحد من قفل التنشيط: screen.

قفل التنشيط screen

يمنع قفل التنشيط screen إطفاء شاشة الجهاز حتى يتمكّن المستخدم من الاطّلاع على المعلومات المعروضة على الشاشة.

الحصول على قفل تنشيط الشاشة

لطلب قفل تنشيط الشاشة، عليك استدعاء طريقة navigator.wakeLock.request() التي تعرض عنصر WakeLockSentinel. أنت تمرِّر هذه الطريقة نوع قفل التنشيط المطلوب كمعلَمة، ويقتصر حاليًا على 'screen' فقط، وبالتالي يكون اختياريًا. يمكن للمتصفّح رفض الطلب لأسباب مختلفة (على سبيل المثال، لأنّ مستوى شحن البطارية منخفض جدًا)، لذلك من الممارسات الجيدة تضمين طلب الاتصال في عبارة try…catch. ستتضمّن رسالة الاستثناء المزيد من التفاصيل في حال حدوث خطأ.

إزالة قفل تنشيط الشاشة

ستحتاج أيضًا إلى طريقة لإلغاء قفل تنشيط الشاشة، ويتم ذلك من خلال استدعاء release() method للكائن 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 تشير إلى ما إذا سبق أن تمّ إصدار عنصر مراقبة. تكون قيمته في البداية false، وتتغيّر إلى true بعد إرسال حدث "release". تساعد هذه السمة مطوّري الويب في معرفة وقت إزالة القفل كي لا يحتاجوا إلى تتبُّع ذلك يدويًا. وتتوفَّر بدءًا من إصدار Chrome 87.

دورة حياة قفل تنشيط الشاشة

عند استخدام العرض التجريبي لقفل تنشيط الشاشة، ستلاحظ أنّ عمليات قفل تنشيط الشاشة تكون حساسة لمستوى ظهور الصفحة. وهذا يعني أنّه سيتم تلقائيًا إلغاء قفل تنشيط الشاشة عند تصغير علامة تبويب أو نافذة أو التبديل بعيدًا عن علامة تبويب أو نافذة مفعَّل فيها قفل تنشيط الشاشة.

لاستعادة قفل تنشيط الشاشة، انتظِر الحدث visibilitychange واطلب قفل تنشيط شاشة جديد عند حدوثه:

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

document.addEventListener('visibilitychange', handleVisibilityChange);

تقليل تأثيرك في موارد النظام

هل يجب استخدام قفل تنشيط الشاشة في تطبيقك؟ يعتمد النهج الذي تتبعه على احتياجات تطبيقك، ولكن عليك أن تطبّق أسهل منهج ممكن لتقليل تأثيره في موارد النظام.

قبل إضافة قفل تنشيط الشاشة إلى تطبيقك، يجب التفكير في إمكانية حلّ حالات الاستخدام باستخدام أحد الحلول البديلة التالية:

عرض توضيحي

اطّلِع على الإصدار التجريبي من Screen Wake Lock ومصدر الإصدار التجريبي. لاحظ كيف يتم تلقائيًا إلغاء قفل تنشيط الشاشة عند تبديل علامات التبويب أو التطبيقات.

عمليات قفل الشاشة في "إدارة مهام نظام التشغيل"

يمكنك استخدام مدير المهام في نظام التشغيل لمعرفة ما إذا كان أحد التطبيقات يمنع جهاز الكمبيوتر من الدخول في وضع السكون. يعرض الفيديو أدناه تطبيق macOS Activity Monitor الذي يشير إلى أنّ Chrome لديه قفل تنشيط شاشة نشط يحافظ على تشغيل النظام.

ملاحظات

يريد فريق Web Platform Incubator Community Group (WICG) وفريق Chrome معرفة رأيك وتجاربك في ما يتعلّق بواجهة برمجة التطبيقات Screen Wake Lock API.

أخبِرنا عن تصميم واجهة برمجة التطبيقات.

هل هناك أي مشكلة في واجهة برمجة التطبيقات لا تعمل كما هو متوقع؟ أم هل هناك طرق أو سمات مفقودة تحتاج إليها لتنفيذ فكرتك؟

الإبلاغ عن مشكلة في التنفيذ

هل رصدت خطأ في عملية تنفيذ Chrome؟ أم أن التنفيذ يختلف عن المواصفات؟

  • يمكنك الإبلاغ عن الخطأ على https://new.crbug.com. وتأكّد من تضمين أكبر قدر ممكن من التفاصيل، وقدِّم تعليمات بسيطة لإعادة إنتاج الخطأ، واضبط المكوّنات على Blink>WakeLock. تعمل ميزة Glitch بشكلٍ رائع لمشاركة عمليات إعادة الإنتاج السريعة والسهلة.

إظهار الدعم لواجهة برمجة التطبيقات

هل تخطّط لاستخدام واجهة برمجة التطبيقات Screen Wake Lock API؟ يساعد دعمك العلني فريق Chrome في تحديد أولويات الميزات وإظهار مدى أهمية توفيرها لمطوّري المتصفّحات الآخرين.

  • شارِك الطريقة التي تنوي بها استخدام واجهة برمجة التطبيقات في سلسلة محادثات Discourse في WICG.
  • أرسِل تغريدة إلى ‎@ChromiumDev باستخدام الهاشتاغ #WakeLock وأطلِعنا على مكان استخدامك للميزة وطريقة استخدامك لها.

روابط مفيدة

الشكر والتقدير

الصورة الرئيسية من أعمال Kate Stone Matheson على Unsplash. فيديو مدير المهام مقدَّمة من "هنري ليم"