מילות מפתח: wear,ambient,alwayson
מערכת Wear OS מטפלת באופן אוטומטי במעבר של אפליקציה פעילה למצב צריכת אנרגיה נמוכה כשהמשתמש כבר לא משתמש בשעון. המצב הזה נקרא מצב רגיש לסביבה של המערכת. אם המשתמש יוצר אינטראקציה עם השעון שוב במסגרת זמן מסוימת, מערכת Wear OS תחזיר אותו לאפליקציה שבה הוא הפסיק.
בתרחישים ספציפיים לדוגמה, למשל, משתמש שרוצה לראות את הדופק והקצב במהלך ריצה, אפשר לשלוט גם במה שיוצג במצב אווירה עם צריכה נמוכה. אפליקציות Wear OS שפועלות גם במצב אווירה וגם במצב אינטראקטיבי נקראות אפליקציות שפועלות תמיד.
הצגת האפליקציה באופן קבוע משפיעה על חיי הסוללה, לכן כדאי להביא בחשבון את ההשפעה הזו כשמוסיפים את התכונה הזו לאפליקציה.
הגדרת הפרויקט
כדי לתמוך במצב אווירה:
- יוצרים או מעדכנים את הפרויקט על סמך ההגדרות בדף יצירה והפעלה של אפליקציה ללבישה.
- מוסיפים את ההרשאה
WAKE_LOCK
לקובץ המניפסט של Android:
<uses-permission android:name="android.permission.WAKE_LOCK" />
הפעלת מצב תמיד מופעל
כדי להשתמש במחלקה
AmbientLifecycleObserver
, צריך לבצע את הפעולות הבאות:
-
מטמיעים את הממשק
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. } }
-
צריך ליצור
AmbientLifecycleObserver
ולרשום את הצופה. בדרך כלל, משתמשים ב-onCreate()
או ב-composable ברמה העליונה אם משתמשים ב-Compose ל-Wear OS, כדי לאפשר הפעלה של ההתנהגות 'תמיד פועל' לאורך מחזור החיים של הפעילות.Kotlin
private val ambientObserver = AmbientLifecycleObserver(activity, callback) override fun onCreate(savedInstanceState: Bundle) { super.onCreate(savedInstanceState) lifecycle.addObserver(observer) // ... }
- כדי להסיר את הצופה, מתבצעת קריאה ל-
removeObserver()
, כשלא נדרשת יותר פעולה שפועלת כל הזמן. לדוגמה, אפשר לקרוא ל-method הזה ב-methodonDestroy()
של הפעילות.
אפליקציות שפועלות תמיד יכולות לעבור לרקע
החל מ-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, מומלץ להשתמש בשיטות האלה להתקשרות חזרה כדי לעדכן את המצב, וכך לאפשר למערכת ליצור מחדש את ממשק המשתמש בהתאם.
דוגמה לאופן שבו אפשר לעשות זאת מופיעה ב
דוגמה לתרגיל שמבוססת על compose ב-GitHub, שמשתמשת ב-AmbientAware
הניתן ליצירה מתוך הספרייה Horologist.