הגדרת אפליקציית Wear OS להעברה של תצוגות שעון

התכונה Watch Face Push מאפשרת לאפליקציה לנהל תצוגות שעון במכשיר Wear OS. ההרשאה הזו כוללת הוספה, עדכון והסרה של תצוגות שעון, וגם הגדרה של תצוגת השעון הפעילה. מגדירים את אפליקציית Wear OS כך שתשתמש ב-Watch Face Push API.

הגדרה

מוסיפים את יחסי התלות הנדרשים:

implementation("androidx.wear.watchface:watchface-push:1.3.0-alpha07")

מוסיפים את הפרטים הבאים לקובץ AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Required to use the Watch Face Push API.  -->
    <uses-permission android:name="com.google.wear.permission.PUSH_WATCH_FACES" />

    <!-- Required to be able to call the setWatchFaceAsActive() method. -->
    <uses-permission android:name="com.google.wear.permission.SET_PUSHED_WATCH_FACE_AS_ACTIVE" />

</manifest>

אחזור הפניה למכונה המנהלת

מקבלים מופע של WatchFacePushManager:

val manager = WatchFacePushManager(context)

WatchFacePushManager מספק גישה לכל השיטות לאינטראקציה עם Watch Face Push.

עבודה עם משבצות

מושג מרכזי בעבודה עם Watch Face Push הוא משבצות. חריצים הם דרך להתייחס לתצוגות שעון מותקנות ששייכות לאפליקציה. המערכת קובעת את המספר המקסימלי של משבצות שזירת מסחר יכולה לכלול. ב-Wear OS 6 המגבלה היא 1.

כשמעדכנים או מסירים את תצוגת השעון, השדה slotId משמש לזיהוי תצוגת השעון שבה מבצעים את הפעולה.

הצגת רשימה של תצוגות השעון

כדי להציג את רשימת תצוגות השעון המותקנות, משתמשים ב-listWatchFaces():

val response = watchFacePushManager.listWatchFaces()
val installedList = response.installedWatchFaceDetails
val remainingSlots = response.remainingSlots

כך תוכלו לבדוק אם המקום פנוי או אם כדי להוסיף תצוגת שעון נוספת צריך להחליף את התצוגה הקיימת. ברשימה מופיעים גם פרטים על תצוגת השעון שמותקנת. לדוגמה, כדי לבדוק אם חבילה מסוימת של תצוגת שעון מותקנת:

suspend fun isInstalled(packageName: String) = watchFacePush.listWatchFaces()
    .installedWatchFaceDetails.any { it.packageName == packageName }

הוספה של תצוגת שעון

אם יש משבצות זמינות, כפי שנקבע בתשובה של listWatchFaces, צריך להשתמש בשיטה addWatchFace():

try {
    // Supply the validation token along with the watch face package data itself.
    val slot = watchFacePushManager.addWatchFace(parcelFileDescriptor, token)
    Log.i(TAG, "${slot.packageName} (${slot.versionCode}) added in slot ${slot.slotId}")
} catch (e: AddWatchFaceException) {
    // Something went wrong adding the watch face.
}

עדכון של תצוגת שעון

עדכון של תצוגת שעון מאפשר לכם להחליף את התוכן של חריץ נתון בחבילה חדשה. אפשר לשדרג את אותה תצוגת שעון לגרסה חדשה יותר או להחליף את תצוגת השעון לגמרי בתצוגה אחרת.

// Replacing the com.example.watchfacepush.green watch face with
// com.example.watchfacepush.red.
val slotId = watchFacePushManager.listWatchFaces().installedWatchFaceDetails.
    firstOrNull { it.packageName == "com.example.watchfacepush.green" }?.slotId

try {
    watchFacePushManager.updateWatchFace(slotId, redParcelFileDesc, redValidationToken)
} catch (e: UpdateWatchFaceException) {
    // Something went wrong updating the watch face.
}

הסרה של תצוגת שעון

כדי להסיר תצוגת שעון:

// Remove the com.example.watchfacepush.green watch face.
val slotId = watchFacePushManager.listWatchFaces().installedWatchFaceDetails.
    firstOrNull { it.packageName == "com.example.watchfacepush.green" }?.slotId

try {
    watchFacePushManager.removeWatchFace(slotId)
} catch (e: RemoveWatchFaceException) {
    // Something went wrong removing the watch face.
}

כך תמיד תוכלו למצוא את תצוגת השעון בבורר תצוגות השעון של המערכת, להציג את הלוגו שלכם באופן בולט ואפילו להוסיף לחצן להפעלת אפליקציית Marketplace בטלפון.

איך בודקים אם תצוגת השעון פעילה

חשוב לבדוק אם תצוגת השעון הפעילה מוגדרת בזירת המסחר כדי להבטיח שהמשתמשים ייהנו מחוויית שימוש חלקה: אם תצוגת השעון הפעילה כבר מוגדרת בזירת המסחר, המשתמשים יכולים לבחור תצוגת שעון אחרת ולהחליף את התצוגה הנוכחית דרך אפליקציית זירת המסחר כדי שהשינוי ייכנס לתוקף. עם זאת, אם זירת המסחר לא מגדירה את חזית השעון הפעילה, באפליקציה בטלפון צריכה להופיע הנחיה נוספת למשתמש. בקטע על אפליקציית הטלפון מוסבר בהרחבה איך לטפל בחוויית המשתמש הזו.

כדי לבדוק אם תצוגת השעון הפעילה מוגדרת בזירת המסחר:

איך להגדיר תצוגת שעון שמוגדרת כברירת מחדל

התכונה 'העברת תצוגות שעון' מאפשרת להתקין תצוגת שעון שמוגדרת כברירת מחדל כשאפליקציית זירת המסחר מותקנת. הפעולה הזו לא מגדירה את תצוגת השעון שמוגדרת כברירת מחדל כתצוגת השעון הפעילה (ראו הגדרת תצוגת השעון הפעילה), אבל היא כן תבטיחה שתצוגת השעון תהיה זמינה בבורר תצוגות השעון של המערכת.

כדי להשתמש בתכונה הזו:

  1. ב-build של אפליקציית Wear OS, צריך לכלול את תצוגת השעון שמוגדרת כברירת מחדל בנתיב: assets/default_watchface.apk
  2. מוסיפים את הרשומה הבאה לקובץ AndroidManifest.xml

    <application ...>
    <meta-data
        android:name="com.google.android.wearable.marketplace.DEFAULT_WATCHFACE_VALIDATION_TOKEN"
        android:value="@string/default_wf_token" />
    

הגדרת תצוגת השעון הפעילה

ההודעה 'תצוגת השעון' מאפשרת לאפליקציה ב-Marketplace להגדיר את תצוגת השעון הפעילה.

המשמעות הספציפית של ההרשאה הזו היא שהאפליקציה יכולה להגדיר את תצוגת השעון הפעילה לתצוגה ששייכת לזירת המסחר, במקרה שתצוגת השעון הפעילה הנוכחית לא שייכת לזירת המסחר. שימו לב: אם תצוגת השעון הפעילה כבר קיימת בזירת המסחר, אפשר להחליף אותה לתצוגת שעון אחרת באמצעות קריאה ל-updateWatchFace כדי להחליף את התוכן של חריץ תצוגת השעון בתצוגת שעון אחרת.

הגדרת תצוגת השעון הפעילה היא תהליך בן שני שלבים:

  1. מקבלים את ההרשאה של Android שנדרשת כדי להגדיר את תצוגת השעון הפעילה.
  2. קוראים ל-method‏ setWatchFaceAsActive.

קבלת הרשאות להגדרת תצוגת השעון הפעילה

ההרשאה הנדרשת היא SET_PUSHED_WATCH_FACE_AS_ACTIVE, וצריך להוסיף אותה למניפסט:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    ...
    <uses-permission android:name="com.google.wear.permission.SET_PUSHED_WATCH_FACE_AS_ACTIVE" />
</manifest>

זוהי הרשאה שמופעלת בזמן ריצה, ולכן האפליקציה צריכה לבקש מהמשתמש את ההרשאה הזו כשהיא פועלת (כדאי להיעזר בספריית Accompanist כדי לעשות זאת).

הגדרת תצוגת השעון כפעילה

אחרי שמקבלים את ההרשאה, צריך להפעיל את setWatchFaceAsActive במזהה המשבצת של תצוגת השעון שצריכה להיות פעילה:

watchFacePushManager.setWatchFaceAsActive(slotId)

אחרי השימוש באפשרות הזו, באפליקציה בטלפון אמורה להופיע הנחיה להגדרה ידנית של תצוגת השעון הפעילה.

קריאת מטא-נתונים נוספים מקובץ ה-APK של תצוגת השעון

האובייקט WatchFaceSlot מספק גם את האמצעים לקבלת מידע נוסף שאפשר להצהיר עליו בתצוגת השעון.

האפשרות הזו יכולה להיות שימושית במיוחד בתרחישים שבהם יש לכם וריאציות קלות של אותו לוח שעון. לדוגמה, אפשר להגדיר את חזית השעון:

  • שם החבילה: com.myapp.watchfacepush.mywatchface
  • גרסת החבילה: 1.0.0

עם זאת, ייתכן שעיצוב השעון הזה יגיע בארבעה קובצי APK שונים, שכולם כמעט זהים אבל עם צבעי ברירת מחדל שונים: אדום, צהוב, ירוק וכחול, שמוגדרים ב-ColorConfiguration בקובץ ה-XML ב-Watch Face Format.

לאחר מכן, השינוי הקל הזה משתקף בכל אחת מארבע חבילות ה-APK:

<!-- For watch face com.myapp.watchfacepush.mywatchface -->
<property
        android:name="default_color"
        android:value="red" />

שימוש במאפיין מותאם אישית מאפשר לאפליקציה לקבוע איזה מהוריאנטים האלה מותקן:

watchFaceDetails
    .getMetaDataValues("com.myapp.watchfacepush.mywatchface.default_color")
    .invoke()

שיקולים

כשמטמיעים את התכונה 'העברת תצוגות שעון' באפליקציה, חשוב להתמקד בצריכת האנרגיה, בשמירת נתונים במטמון, בעדכון של תצוגות השעון בחבילה ובמתן תצוגת שעון רגילה ומייצגת כברירת מחדל.

כוח

שיקול מרכזי בכל אפליקציה שפועלת ב-Wear OS הוא צריכת החשמל. לרכיב של Wear OS באפליקציה שלכם ב-Marketplace:

  1. האפליקציה צריכה לפעול כמה שפחות ובתדירות נמוכה ככל האפשר (אלא אם המשתמש מבצע אינטראקציה ישירה איתה). למשל:
    • צמצום ההפעלה של האפליקציה מאפליקציית הטלפון
    • צמצום ההפעלה של משימות WorkManager
  2. תזמון של דיווח ניתוח נתונים לזמן שבו השעון נטען:
    1. אם רוצים לדווח על נתוני שימוש מאפליקציית Wear OS או ממדדים אחרים, צריך להשתמש ב-WorkManager עם האילוץ requiresCharging.
  3. תזמון עדכונים לזמן שהשעון נטען ושימוש ב-Wi-Fi:
    1. מומלץ לבדוק את הגרסאות של תצוגות השעון המותקנות ולעדכן אותן באופן אוטומטי. שוב, משתמשים באילוץ requiresCharging ובסוג הרשת UNMETERED עבור requiresNetworkType.
    2. כשהמכשיר בטעינה, סביר להניח שיש לו גישה ל-Wi-Fi. מבקשים חיבור Wi-Fi כדי להוריד במהירות את חבילות ה-APK המעודכנות, ומנתקים את החיבור לרשת בסיום.
    3. ההנחיה הזו רלוונטית גם למקרה שבו לוח השעון של היום זמין בזירת המסחר. כדאי להוריד אותו מראש בזמן שהשעון נטען.
  4. לא לתזמן משימות לבדיקה של תצוגת השעון הפעילה:
    1. בדיקה תקופתית אם תצוגת השעון עדיין פעילה בזירת המסחר ואיזו תצוגת שעון היא, גורמת לירידה ברמת הטעינה של הסוללה. מומלץ להימנע מהגישה הזו.
  5. לא להשתמש בהתראות בשעון:
    1. אם האפליקציה שלכם משתמשת בהתראות, כדאי להתמקד בהתראות בטלפון, שבהן הפעולה של המשתמש פותחת את אפליקציית הטלפון כדי להמשיך בתהליך. מוודאים שהן לא מקשרות לאפליקציה בשעון באמצעות setLocalOnly.

הופך לקובץ שמור

בדוגמה של זירת המסחר הקנונית, תצוגות השעון מועברות מהטלפון לשעון. החיבור הזה הוא בדרך כלל חיבור Bluetooth, שיכול להיות איטי למדי.

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

אם המשתמש ינסה חזית שעון אחרת אבל יחליט לחזור לחזית השעון שבחר בעבר, הפעולה הזו תתבצע כמעט באופן מיידי.

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

עדכון של תצוגות שעון בחבילה

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

כדי לטפל במצב כזה, אפליקציית זירת המסחר צריכה להאזין לפעולת השידור MY_PACKAGE_REPLACED ולבדוק אם יש צורך לעדכן תצוגות שעון בחבילה מנכסי החבילה.

תצוגת שעון רגילה ומייצגת שמוגדרת כברירת מחדל

תצוגת שעון שמוגדרת כברירת מחדל היא דרך מצוינת לעזור למשתמשים לגלות את זירת המסחר שלכם ולהשתמש בה: תצוגת השעון מותקנת כשזירת המסחר מותקנת, כך שהמשתמשים יכולים למצוא אותה בגלריה של תצוגות השעון.

כמה שיקולים שכדאי להביא בחשבון כשעובדים עם חזיתות שעון שמוגדרות כברירת מחדל:

  • אל תשתמשו ב-removeWatchFace אם המשתמש בחר להסיר תצוגת שעון מאפליקציית זירת המסחר. במקרה כזה, צריך להחזיר את תצוגת השעון לתצוגת ברירת המחדל באמצעות updateWatchFace. כך המשתמשים יוכלו למצוא את תצוגת השעון ולהגדיר אותה מהגלריה.
  • כדאי ליצור תצוגת שעון פשוטה וקלה לזיהוי כברירת מחדל באמצעות הלוגו והעיצוב שלכם. כך המשתמשים יוכלו למצוא אותה בגלריה של תצוגות השעון.
  • מוסיפים לחצן ללוח השעון שמוגדר כברירת מחדל כדי לפתוח את אפליקציית הטלפון. אפשר לעשות זאת בשני שלבים:

    1. מוסיפים רכיב Launch לתצוגת השעון כדי להפעיל כוונה באמצעות אפליקציית Wear OS, לדוגמה:

      <Launch target="com.myapp/com.myapp.LaunchOnPhoneActivity" />

    2. ב-LaunchOnPhoneActivity, פותחים את אפליקציית הטלפון באמצעות RemoteActivityHelper.