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

يعالج 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() من الأخرى.

يمكن نقل التطبيقات المفعّلة دائمًا إلى الخلفية.

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

إذا كان تطبيقك قيد التشغيل دائمًا يعرض معلومات عن مهمة مستخدم جارية، مثل تشغيل الموسيقى أو جلسة تمرين - قد ترغب في الحفاظ على النشاط الجاري مرئيًا حتى تنتهي المهمة. لإجراء ذلك، استخدِم Oncurrent 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 من مكتبة Horology.