البقاء في الوضع النشط مع واجهة برمجة التطبيقات 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. بدون عمليات قفل التنشيط، كانت شاشات المستخدمين ستطفأ بشكل متكرر أثناء تشغيل الجولة، مما يجعل من الصعب استخدامها.

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

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

الوضع الحالي

الخطوة الحالة
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 للإشارة إلى أنّ 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 على Unسبل فيديو مدير المهام مقدَّمة من "هنري ليم"