توفّر واجهة برمجة التطبيقات Screen Wake Lock طريقة لمنع الأجهزة من تعتيم الشاشة أو قفلها عندما يكون من الضروري استمرار تشغيل أحد التطبيقات.
ما هي Screen Wake Lock API؟
ولتجنُّب استنزاف البطارية، تنتقل معظم الأجهزة إلى وضع السكون بسرعة عند تركها بدون استخدام. على الرغم من أنّ هذا الإجراء لا يسبّب أي مشاكل في معظم الأحيان، إلا أنّ بعض التطبيقات تحتاج إلى إبقاء الشاشة نشطة لإكمال عملها. وتشمل الأمثلة تطبيقات الطبخ التي تعرض خطوات وصفة طعام أو لعبة مثل Ball Puzzle التي تستخدم واجهات برمجة التطبيقات الخاصة بحركة الجهاز لإدخال البيانات.
توفّر Screen Wake Lock API طريقة لمنع الجهاز من تعتيم الشاشة وقفلها. تتيح هذه الإمكانية تجارب جديدة كانت تتطلّب حتى الآن تطبيقًا خاصًا بالنظام الأساسي.
تحدّ واجهة برمجة التطبيقات Screen Wake Lock من الحاجة إلى حلول بديلة غير فعّالة وقد تستهلك الكثير من الطاقة. تعالج هذه الواجهة أوجه القصور في واجهة برمجة تطبيقات قديمة كانت تقتصر على إبقاء الشاشة نشطة فقط، كما كانت تتضمّن عددًا من المشاكل المتعلّقة بالأمان والخصوصية.
حالات الاستخدام المقترَحة لواجهة برمجة التطبيقات 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()
للعنصر 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.
أخبِرنا عن تصميم واجهة برمجة التطبيقات
هل هناك مشكلة في واجهة برمجة التطبيقات؟ أو هل هناك طرق أو سمات ناقصة تحتاج إلى تنفيذ فكرتك؟
- يمكنك الإبلاغ عن مشكلة في المواصفات في مستودع Screen Wake Lock API على GitHub أو إضافة أفكارك إلى مشكلة حالية.
الإبلاغ عن مشكلة في عملية التنفيذ
هل عثرت على خطأ في تنفيذ Chrome؟ أو هل يختلف التنفيذ عن المواصفات؟
- أبلِغ عن الخطأ على https://new.crbug.com. احرص على تضمين أكبر قدر ممكن من التفاصيل، وقدِّم تعليمات بسيطة لإعادة إنتاج الخطأ، واضبط المكوّنات على
Blink>WakeLock
.
إظهار الدعم لواجهة برمجة التطبيقات
هل تخطّط لاستخدام Screen Wake Lock API؟ يساعد دعمك العلني فريق Chrome في تحديد أولويات الميزات، ويوضّح لمورّدي المتصفّحات الآخرين مدى أهمية توفيرها.
- شارِك خططك بشأن استخدام واجهة برمجة التطبيقات في سلسلة محادثات WICG Discourse.
- أرسِل تغريدة إلى @ChromiumDev باستخدام الهاشتاغ
#WakeLock
وأخبرنا عن مكان استخدامك له وكيفية استخدامه.
روابط مفيدة
- مواصفات اقتراح مرشّح | مسودة المحرّر
- عرض توضيحي لـ Screen Wake Lock | مصدر العرض التوضيحي لـ Screen Wake Lock
- خطأ في التتبُّع
- إدخال ChromeStatus.com
- تجربة Wake Lock API
- مكوّن Blink:
Blink>WakeLock
الإقرارات
الصورة الرئيسية من Kate Stone Matheson على Unsplash. تمت الاستعانة بفيديو "إدارة المهام" من هنري ليم.