يتعامل نظام التشغيل Wear OS تلقائيًا مع الانتقال إلى وضع الطاقة المنخفضة لتطبيق نشط عندما يتوقف المستخدم عن استخدام ساعته. ويُعرف هذا الوضع باسم وضع الإضاءة السينمائية. إذا تفاعل المستخدم مع الساعة مرة أخرى خلال إطار زمني معيّن، سيعيد نظام التشغيل Wear OS المستخدم إلى التطبيق الذي توقّف عنده.
في حالات استخدام معيّنة، على سبيل المثال، إذا أراد المستخدم الاطّلاع على معدّل نبضات القلب ووتيرة الجري أثناء الركض، يمكنك أيضًا التحكّم في المحتوى الذي يتم عرضه في "وضع الإضاءة السينمائية" المنخفض الطاقة. تُعرف تطبيقات Wear OS التي تعمل في كل من الوضعَين "الإضاءة السينمائية" و"التفاعل" باسم التطبيقات المشغّلة دائمًا.
إنّ جعل التطبيق مرئيًا باستمرار يؤثر في عمر البطارية، لذا ننصحك بمراعاة هذا التأثير عند إضافة هذه الميزة إلى تطبيقك.
ضبط إعدادات مشروعك
لتفعيل ميزة "الإضاءة السينمائية"، اتّبِع الخطوات التالية:
- أنشئ مشروعك أو عدِّله استنادًا إلى الإعدادات في صفحة إنشاء وتشغيل تطبيق مخصّص للأجهزة القابلة للارتداء.
- أضِف إذن
WAKE_LOCK
إلى ملف بيان Android:
<uses-permission android:name="android.permission.WAKE_LOCK" />
تفعيل وضع "تشغيل الشاشة دائمًا"
لاستخدام فئة
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()
لنشاطك.
يمكن نقل التطبيقات التي تعمل دائمًا إلى الخلفية
بدءًا من الإصدار 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
.
للمساعدة في الحفاظ على الطاقة، اتّبِع الخطوات التالية:
- إضاءة عدد أقل من وحدات البكسل وترك معظم الشاشة سوداء ننصحك بعدم عرض سوى المعلومات المهمة في الوضع "الإضاءة السينمائية"، وتقديم المزيد من التفاصيل عندما يدخل المستخدم إلى الوضع التفاعلي.
- تعديل أي محتوى لتقليل عدد التحديثات على سبيل المثال، يمكنك عرض الموقّتات لأقرب دقيقة بدلاً من أقرب ثانية.
- في
AmbientDetails
كائن تم تمريره إلىonEnterAmbient()
:- في حال ضبط
deviceHasLowBitAmbient
، أوقِف ميزة تمويه الحواف كلما أمكن ذلك. - في حال ضبط
burnInProtectionRequired
، حرِّك الرسم البياني بشكل دوري وتجنَّب المناطق البيضاء الكاملة.
- في حال ضبط
قائمة التحقّق من العرض بلا انقطاع
قد تكون هناك حالات تريد فيها التحكّم إلى أقصى حد في الشاشة أثناء انتقال الجهاز إلى حالات مختلفة، على سبيل المثال عندما يريد تطبيق التمارين تجنُّب ظهور خلفية شاشة الساعة على الشاشة أثناء التمرين. في هذه الحالات، يُرجى اتّباع الخطوات التالية:
- نفِّذ واجهة AmbientLifecycleObserver.AmbientLifecycleCallback.
- أنشئ تنسيقًا جديدًا يستهلك طاقة منخفضة لاستخدامه عندما يكون الجهاز في وضع الإضاءة السينمائية.
- خلال فترة التمرين، نفِّذ نشاطًا جاريًا.
للحصول على مثال على كيفية تحقيق ذلك، يمكنك الاطّلاع على
النموذج التدريبي المستنِد إلى الإنشاء على GitHub، والذي يستخدم العنصر القابل للتجميع AmbientAware
من مكتبة Horologist.