برنامه های همیشه روشن و حالت محیطی سیستم

زمانی که کاربر دیگر از ساعت خود استفاده نمی‌کند، Wear OS به‌طور خودکار حرکت به حالت کم مصرف را برای یک برنامه فعال کنترل می‌کند. این حالت محیطی سیستم نامیده می شود. در صورت رعایت هر یک از شرایط زیر، پس از تعامل کاربر با ساعت، برنامه از سر گرفته می شود:

  • تعامل کاربر در یک بازه زمانی خاص (قبل از مهلت زمانی) رخ می دهد.
  • برنامه اعلام می کند و یک فعالیت در حال انجام را آغاز کرده است.

برای موارد استفاده خاص - به عنوان مثال، کاربری که می خواهد ضربان قلب و سرعت را در حین دویدن ببیند - همچنین می توانید کنترل کنید که چه چیزی در حالت محیطی سیستم نمایش داده می شود. برنامه‌های Wear OS که در هر دو حالت محیطی و تعاملی اجرا می‌شوند ، برنامه‌های همیشه روشن نامیده می‌شوند.

نمایش دائمی یک برنامه بر عمر باتری تأثیر می گذارد، بنابراین هنگام افزودن این ویژگی به برنامه خود، این تأثیر را در نظر بگیرید.

پروژه خود را پیکربندی کنید

برای پشتیبانی از حالت محیطی، مراحل زیر را دنبال کنید:

  1. پروژه خود را بر اساس تنظیمات موجود در صفحه ایجاد و اجرای یک برنامه پوشیدنی ایجاد یا به روز کنید.
  2. (فقط در Wear OS 4 یا پایین‌تر مورد نیاز است) مجوز WAKE_LOCK را به فایل مانیفست Android اضافه کنید:
<uses-permission android:name="android.permission.WAKE_LOCK" android:maxSdkVersion="33"/>

حالت همیشه روشن را فعال کنید

با شروع از Wear OS 6، برنامه‌هایی که targetSdkVersion روی 36 یا بالاتر تنظیم شده‌اند، به‌طور پیش‌فرض همیشه روشن هستند. این برنامه ها در حالت محیطی سیستم برای مدت زمان محدودی بدون هیچ گونه پیکربندی قابل مشاهده هستند. اگر targetSdkVersion برنامه شما کمتر از 36 است، یا اگر برنامه شما باید با Wear OS 5 یا پایین تر اجرا شود، از کلاس AmbientLifecycleObserver استفاده کنید تا برنامه خود را همیشه روشن کنید.

با استفاده از کلاس AmbientLifecycleObserver به رویدادهای حالت محیطی واکنش نشان دهید

برنامه‌ها همچنین می‌توانند از کلاس AmbientLifecycleObserver برای واکنش مستقیم به رویدادهای حالت محیطی استفاده کنند:

  1. رابط AmbientLifecycleObserver.AmbientLifecycleCallback را مانند مثال زیر پیاده سازی کنید. در این مرحله، روش‌ها خالی هستند، اما بعداً در راهنما جزئیات مربوط به تغییراتی را که باید در تجسم برای ورود و خروج از حالت محیطی ایجاد کنید، ارائه می‌کند.

    کاتلین

    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 ایجاد کنید و ناظر را ثبت کنید. معمولاً اگر از Compose for Wear OS استفاده می‌شود، در onCreate() یا Composable سطح بالا استفاده می‌شود تا امکان فعال کردن رفتار همیشه روشن در طول چرخه حیات فعالیت وجود داشته باشد.

    کاتلین

    private val ambientObserver = AmbientLifecycleObserver(activity, callback)
    
    override fun onCreate(savedInstanceState: Bundle) {
      super.onCreate(savedInstanceState)
      lifecycle.addObserver(observer)
    
      // ...
    }
  3. هنگامی که رفتار همیشه روشن دیگر مورد نیاز نیست، با فراخوانی removeObserver() ناظر را حذف کنید. برای مثال، ممکن است این متد را در متد onDestroy() فعالیت خود فراخوانی کنید.

متن زمان را با استفاده از ویجت TimeText به روز کنید

با شروع از Wear OS 6، ویجت TimeText از حالت محیطی آگاه است. اگر برنامه شما فقط نیاز به به روز رسانی متن زمانی در هر دقیقه در حالت محیطی دارد، می توانید فقط از ویجت TimeText بدون استفاده از AmbientLifecycleObserver استفاده کنید.

برنامه های همیشه روشن می توانند به پس زمینه منتقل شوند

با شروع در Wear OS 5، سیستم برنامه‌های همیشه روشن را پس از اینکه در حالت محیطی برای مدت زمان مشخصی قابل مشاهده بودند، به پس‌زمینه منتقل می‌کند. کاربران می توانند زمان وقفه را در تنظیمات سیستم پیکربندی کنند.

اگر برنامه همیشه روشن شما اطلاعاتی در مورد یک کار در حال انجام کاربر - مانند پخش موسیقی یا یک جلسه تمرینی - نشان می دهد، ممکن است بخواهید فعالیت در حال انجام را تا پایان کار قابل مشاهده نگه دارید. برای انجام این کار، از 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 تنظیم شده است، در صورت امکان، anti-aliasing را غیرفعال کنید.
    • اگر burnInProtectionRequired تنظیم شده است، تصویرسازی را به صورت دوره‌ای تغییر دهید و از مناطق سفید جامد اجتناب کنید.
  • از اجرای مداوم انیمیشن در حالت محیطی خودداری کنید. با شروع در Wear OS 5.1، انیماتورها ممکن است در حالت محیطی کار نکنند.

چک لیست برای نمایش بدون وقفه

ممکن است شرایطی وجود داشته باشد که بخواهید هنگام حرکت دستگاه در حالت‌های مختلف، حداکثر کنترل را روی نمایشگر داشته باشید، برای مثال زمانی که یک برنامه تمرینی می‌خواهد از ظاهر شدن صفحه ساعت روی صفحه در طول تمرین جلوگیری کند. در این موارد موارد زیر را انجام دهید:

  1. رابط AmbientLifecycleObserver.AmbientLifecycleCallback را پیاده سازی کنید.
  2. یک طرح بندی کم مصرف جدید برای استفاده در زمانی که دستگاه در حالت محیط سیستم است ایجاد کنید.
  3. در طول مدت تمرین، یک فعالیت مداوم را اجرا کنید.

برای مثالی از اینکه چگونه می توان به این امر دست یافت، نمونه تمرین مبتنی بر نوشتن را در GitHub بررسی کنید، که از AmbientAware قابل ترکیب از کتابخانه Horologist استفاده می کند.