تطبيقات قيد التشغيل دائمًا وميزة "وضع الإضاءة السينمائية"

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

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

إنّ جعل التطبيق مرئيًا باستمرار يؤثر في عمر البطارية، لذا ننصحك بمراعاة هذا التأثير عند إضافة هذه الميزة إلى تطبيقك.

ضبط مشروعك

لتفعيل ميزة "الإضاءة السينمائية"، اتّبِع الخطوات التالية:

  1. يمكنك إنشاء مشروعك أو تحديثه استنادًا إلى الإعدادات في إنشاء وتشغيل صفحة ضمن تطبيقات الأجهزة القابلة للارتداء.
  2. أضِف إذن WAKE_LOCK إلى ملف بيان Android:
<uses-permission android:name="android.permission.WAKE_LOCK" />

تفعيل وضع "تشغيل الشاشة دائمًا"

لاستخدام فئة AmbientLifecycleObserver، اتّبِع الخطوات التالية:

  1. نفِّذ 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.
        }
    }
  2. إنشاء AmbientLifecycleObserver وتسجيل المراقب. وعادةً ما تكون هذه سيتم استخدامها في onCreate() أو المستوى الأعلى القابل للإنشاء في حال استخدام ميزة Compose في Wear OS، وذلك من أجل تفعيل السلوك "قيد التشغيل دائمًا" طوال دورة حياة النشاط.

    Kotlin

    private val ambientObserver = AmbientLifecycleObserver(activity, callback)
    
    override fun onCreate(savedInstanceState: Bundle) {
      super.onCreate(savedInstanceState)
      lifecycle.addObserver(observer)
    
      // ...
    }
    
  3. إزالة المراقب، من خلال الاتصال بالرقم 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، حرِّك الرسم البياني بشكل دوري وتجنَّب المناطق البيضاء الكاملة.

عند استخدام Compose لنظام التشغيل Wear OS، ننصحك باستخدام طرق الاستدعاء التالية لتعديل الحالة، ما يسمح للنظام بإعادة إنشاء واجهة المستخدم بشكلٍ مناسب.

للحصول على مثال على كيفية تحقيق ذلك، يمكنك الاطّلاع على النموذج التدريبي المستنِد إلى الإنشاء على GitHub، والذي يستخدم العنصر القابل للتجميع AmbientAware من مكتبة Horologist.