يتعامل نظام التشغيل Wear OS تلقائيًا مع الانتقال إلى وضع الطاقة المنخفضة لتطبيق نشط عندما يتوقف المستخدم عن استخدام ساعته. ويُعرف هذا الوضع باسم وضع الإضاءة السينمائية. تتم استعادة تشغيل التطبيق بعد تفاعل المستخدم مع الساعة في حال استيفاء أي من الشروط التالية:
- يحدث تفاعل المستخدِم خلال إطار زمني معيّن (قبل انتهاء مهلة الانتظار).
- يعلن التطبيق عن نشاط مستمر وبدأه.
في حالات استخدام معيّنة، مثلاً إذا أراد المستخدم الاطّلاع على معدّل ضربات القلب ووتيرة الجري أثناء الركض، يمكنك أيضًا التحكّم في المحتوى الذي يظهر في وضع الإضاءة السينمائية للنظام. تُعرف تطبيقات Wear OS التي تعمل في كل من الوضعَين "الإضاءة السينمائية" و"الإضاءة التفاعُلية" باسم التطبيقات المشغّلة دائمًا.
إنّ جعل التطبيق مرئيًا باستمرار يؤثر في عمر البطارية، لذا ننصحك بمراعاة هذا التأثير عند إضافة هذه الميزة إلى تطبيقك.
ضبط إعدادات مشروعك
لتفعيل ميزة "الإضاءة السينمائية"، اتّبِع الخطوات التالية:
- أنشئ مشروعك أو عدِّله استنادًا إلى الإعدادات الواردة في صفحة إنشاء تطبيق مخصّص للأجهزة القابلة للارتداء وتشغيله.
-
(لا يلزم ذلك إلا على Wear OS 4 أو الإصدارات الأقدم) أضِف الإذن
WAKE_LOCK
إلى ملف بيان Android:
<uses-permission android:name="android.permission.WAKE_LOCK" android:maxSdkVersion="33"/>
تفعيل وضع "تشغيل الشاشة دائمًا"
اعتبارًا من الإصدار 6 من Wear OS، تكون التطبيقات التي تم ضبط targetSdkVersion
فيها على 36 أو أعلى قيد التشغيل دائمًا تلقائيًا.
وتظل هذه التطبيقات مرئية أثناء تفعيل وضع الإضاءة السينمائية لمدة زمنية محدودة بدون أي إعدادات.
إذا كان الإصدار targetSdkVersion
لتطبيقك أقل من 36، أو إذا كان تطبيقك يحتاج إلى التشغيل على Wear OS 5 أو إصدار أقدم،
استخدِم فئة AmbientLifecycleObserver
لتشغيل تطبيقك دائمًا.
التفاعل مع أحداث "وضع الإضاءة السينمائية" باستخدام فئة AmbientLifecycleObserver
يمكن للتطبيقات أيضًا استخدام فئة
AmbientLifecycleObserver
للتفاعل مباشرةً مع أحداث الوضع السينمائي:
-
نفِّذ واجهة
AmbientLifecycleObserver.AmbientLifecycleCallback
، كما هو موضّح في المثال التالي. في هذه المرحلة، تكون الطرق فارغة، ولكن في وقت لاحق من الدليل، يتم تقديم تفاصيل عن التغييرات التي يجب التأكّد من إجرائها على العرض المرئي للدخول إلى وضع الاستراحة والخروج منه.Kotlin
val ambientCallback = object : AmbientLifecycleObserver.AmbientLifecycleCallback { override fun onEnterAmbient(ambientDetails: AmbientLifecycleObserver.AmbientDetails) { // ... Called when moving from interactive mode into ambient mode. } override fun onExitAmbient() { // ... Called when leaving ambient mode, back into interactive mode. } override fun onUpdateAmbient() { // ... Called by the system in order to allow the app to periodically // update the display while in ambient mode. Typically the system will // call this every 60 seconds. } }
-
أنشئ
AmbientLifecycleObserver
وسجِّل المُراقب. وعادةً ما يتم استخدام هذه القيمة فيonCreate()
أو في العنصر القابل للتجميع من المستوى الأعلى في حال استخدام Compose لنظام التشغيل Wear OS، وذلك بهدف السماح بتفعيل السلوك "التشغيل دائمًا" طوال دورة حياة النشاط.Kotlin
private val ambientObserver = AmbientLifecycleObserver(activity, callback) override fun onCreate(savedInstanceState: Bundle) { super.onCreate(savedInstanceState) lifecycle.addObserver(observer) // ... }
- أزِل المراقب من خلال استدعاء
removeObserver()
عندما لا يكون السلوك "قيد التشغيل دائمًا" مطلوبًا بعد الآن. على سبيل المثال، يمكنك استدعاء هذه الطريقة في طريقةonDestroy()
لنشاطك.
تعديل نص الوقت باستخدام التطبيق المصغّر TimeText
بدءًا من الإصدار 6 من Wear OS، أصبح التطبيق المصغّر TimeText
متوافقًا مع "وضع الاستراحة". إذا كان
تطبيقك يحتاج فقط إلى تعديل نص الوقت كل دقيقة أثناء الوضع "الإضاءة السينمائية"، يمكنك
استخدام التطبيق المصغّر TimeText
فقط بدون استخدام AmbientLifecycleObserver
.
يمكن نقل التطبيقات التي تعمل دائمًا إلى الخلفية
بدءًا من الإصدار 5 من نظام التشغيل Wear OS، ينقل النظام التطبيقات التي تعمل دائمًا إلى الخلفية بعد ظهورها في وضع الإضاءة السينمائية لفترة زمنية معيّنة. يمكن للمستخدمين ضبط مهلة الانتظار في إعدادات النظام.
إذا كان تطبيقك المشغّل دائمًا يعرض معلومات عن مهمة مستخدم جارية، مثل تشغيل الموسيقى أو جلسة تدريب، قد تحتاج إلى إبقاء النشاط الجاري مرئيًا إلى أن تنتهي المهمة. ولإجراء ذلك، استخدِم Ongoing Activity API لنشر إشعار مستمر مرتبط بنشاطك الدائم.
لكي يتعرّف النظام على النشاط الجاري، يجب أن يشير رمز اللمس في إعلام الرسالة المستمر إلى نشاطك الدائم، كما هو موضّح في مقتطف الرمز التالي:
// Create a pending intent that point to your always-on activity
val touchIntent =
PendingIntent.getActivity(
context,
0,
Intent(context, MyAlwaysOnActivity::class.java),
PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
)
val notificationBuilder =
NotificationCompat.Builder(this, CHANNEL_ID)
// ...
.setOngoing(true)
val ongoingActivity =
OngoingActivity.Builder(
applicationContext, NOTIFICATION_ID, notificationBuilder
)
// ...
.setTouchIntent(touchIntent)
.build()
ongoingActivity.apply(applicationContext)
notificationManager.notify(
NOTIFICATION_ID,
notificationBuilder.build()
)
تعديل تجربة المستخدم في الوضع السينمائي
بشكلٍ تلقائي، عند تفعيل ميزة "تشغيل الشاشة دائمًا"، لا تتغيّر
طريقة ظهور الشاشة عندما تدخل الساعة في وضع الاستراحة. يمكنك تعديل هذا
السلوك من خلال إلغاء الطرق في
AmbientLifecycleCallback
.
للمساعدة في توفير الطاقة، اتّبِع الخطوات التالية:
- إضاءة عدد أقل من وحدات البكسل ننصحك بعدم عرض سوى المعلومات المهمة في الوضع "الإضاءة السينمائية"، وتقديم المزيد من التفاصيل عندما يدخل المستخدم إلى الوضع التفاعلي.
- يجب إبقاء 85% على الأقل من الشاشة باللون الأسود، وإزالة الحشوات، واستخدام الخطوط المميّزة للأزرار والرموز الكبيرة.
- تجنَّب عرض معلومات غير ضرورية، مثل العلامات التجارية غير الوظيفية وصور الخلفية.
- إبقاء العناصر في الموضع نفسه في الوضعَين "نشط" و"مفعّل دائمًا" وعرض الوقت دائمًا
- تعديل أي محتوى لتقليل عدد التحديثات على سبيل المثال، يمكنك عرض الموقّتات لأقرب دقيقة بدلاً من أقرب ثانية.
- أزِل واجهة مستخدم العنصر النائب أو أظهِرها للمحتوى الأبجدي الرقمي الذي يتم تعديله بشكل متكرر، مثل المسافة أو الوقت.
- أزِل مؤشرات التقدّم التي يتم تعديلها بشكل متكرّر، مثل حلقات العد التنازلي وفترات تشغيل الوسائط.
- عند الدخول إلى وضع "العرض دائمًا"، إذا كان المستخدم قد كان في السابق على إحدى شاشات الإعدادات أو الضبط في تطبيقك، ننصحك بعرض شاشة أكثر صلة في تطبيقك بدلاً من ذلك.
- في
AmbientDetails
العنصر الذي تم تمريره إلىonEnterAmbient()
:- في حال ضبط
deviceHasLowBitAmbient
، أوقِف ميزة تمويه الحواف كلما أمكن ذلك. - في حال ضبط
burnInProtectionRequired
، حرِّك الرسم البياني بشكل دوري وتجنَّب المناطق البيضاء الكاملة.
- في حال ضبط
- تجنَّب تشغيل صور متحركة مستمرة أثناء "وضع الاستراحة". بدءًا من Wear OS 5.1، قد يتوقف تشغيل الصور المتحركة أثناء "وضع الاستراحة".
قائمة التحقّق من العرض بلا انقطاع
قد تكون هناك حالات تريد فيها التحكّم إلى أقصى حد في الشاشة أثناء انتقال الجهاز إلى حالات مختلفة، على سبيل المثال عندما يريد تطبيق التمارين تجنُّب ظهور خلفية شاشة الساعة على الشاشة أثناء التمرين. في هذه الحالات، يُرجى اتّباع الخطوات التالية:
- نفِّذ واجهة AmbientLifecycleObserver.AmbientLifecycleCallback.
- أنشئ تنسيقًا جديدًا يستهلك طاقة منخفضة لاستخدامه عندما يكون الجهاز في وضع الإضاءة السينمائية.
- خلال فترة التمرين، نفِّذ نشاطًا جاريًا.
للحصول على مثال على كيفية تحقيق ذلك، يمكنك الاطّلاع على
النموذج التدريبي المستنِد إلى الإنشاء على GitHub، والذي يستخدم العنصر القابل للتجميع AmbientAware
من مكتبة Horologist.