البقاء في الوضع النشط مع واجهة برمجة التطبيقات 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". تساعد هذه السمة مطوّري الويب في معرفة وقت إزالة القفل كي لا يحتاجوا إلى تتبُّع ذلك يدويًا. وهي متاحة اعتبارًا من الإصدار 87 من Chrome.

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

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

لاستعادة قفل تنشيط الشاشة، انتظِر الحدث 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 (WICG) وفريق Chrome معرفة أفكارك وتجاربك المتعلّقة باستخدام واجهة برمجة التطبيقات Screen Wake Lock API.

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

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

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

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

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

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

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

روابط مفيدة

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

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