אפליקציות שפועלות כל הזמן ומצב רגישות של המערכת

מערכת 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() או בתוכן הקומפוזבילי ברמה העליונה אם משתמשים ב'כתיבה' ל-Wear OS, כדי לאפשר התנהגות שפועלת כל הזמן לכל אורך מחזור החיים של הפעילות.

    Kotlin

    private val ambientObserver = AmbientLifecycleObserver(activity, callback)
    
    override fun onCreate(savedInstanceState: Bundle) {
      super.onCreate(savedInstanceState)
      lifecycle.addObserver(observer)
    
      // ...
    }
    
  3. הסרת הצופה, באמצעות קריאה ל-removeObserver(), כאשר המשבצת פועלת כל הזמן לא נדרשת יותר. לדוגמה, אפשר להפעיל את השיטה הזו ב-method‏ 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 מוגדרת, כדאי להזיז את התצוגה החזותית מדי פעם ולהימנע מאזורים לבנים מוצקים.

כשמשתמשים בהצעות לכתיבה ל-Wear OS, מומלץ להשתמש בשיטות הבאות להתקשרות חזרה לעדכון המצב, שמאפשר למערכת ליצור מחדש את ממשק המשתמש בצורה תקינה.

כדי לראות דוגמה לאופן שבו אפשר לעשות את זה, אפשר לעיין במודל דוגמת תרגיל ב-GitHub, המשתמשת ב-AmbientAware קומפוזבילי מספריית הורולוג.