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

מערכת 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(), כאשר המשבצת פועלת כל הזמן לא נדרשת יותר. לדוגמה, אפשר לקרוא לשיטה הזו השיטה onDestroy() של פעילות.

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

החל מ-Wear OS 5, המערכת מעבירה אפליקציות שפועלות כל הזמן לרקע לאחר אפשר לראות אותם במצב רגישות לסביבה למשך זמן מסוים. המשתמשים יכולים להגדיר את הזמן הקצוב לתפוגה בהגדרות המערכת.

אם באפליקציה שפועלת כל הזמן מוצג מידע על משימה מתמשכת של משתמש, כמו הפעלת מוזיקה או אימון כושר – כדאי להמשיך את הפעילות יהיה גלוי עד לסיום המשימה. כדי לעשות את זה, צריך להשתמש ב-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 קומפוזבילי מהספרייה הורולוג.