התראות ב-Wear OS

ההתראות בשעונים משתמשות באותם ממשקי API ויש להן את אותו המבנה כמו ההתראות בטלפונים.

ההתראות יכולות להופיע בשעון בשתי דרכים:

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

בשני התרחישים, משתמשים במחלקה NotificationCompat.Builder כדי ליצור התראות. כשיוצרים התראות באמצעות מחלקת ה-builder, המערכת דואגת להצגת ההתראות בצורה נכונה. לדוגמה, כששולחים התראה מהאפליקציה לנייד, כל התראה מופיעה ככרטיס בפיד ההתראות.

בדוגמה הבאה אפשר לראות איך ההתראות מוצגות.

notification-cards

איור 1. אותה התראה מוצגת בטלפון ובשעון.

כדי להשיג את התוצאות הכי טובות, כדאי להשתמש באחת ממחלקות המשנה של NotificationCompat.Style.

הערה: שימוש ב-RemoteViews מסיר מההתראות פריסות בהתאמה אישית, ובמכשיר הלביש מוצגים רק הטקסט והסמלים.

הערה: התראות על Intent במסך מלא (setFullScreenIntent()) וההרשאה USE_FULL_SCREEN_INTENT לא נתמכות ב-Wear OS.

התראות מומלצות לגאדג'טים לבישים

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

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

expandable-notification

איור 2. דוגמה להתראה על MessagingStyle ב-Wear OS.

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

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

איך להימנע מהתראות כפולות

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

עם זאת, אם אתם יוצרים אפליקציית שעון עצמאית ואפליקציית טלפון משלימה, האפליקציות יוצרות התראות כפולות.

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

הוספת תכונות ספציפיות למכשירים לבישים להתראה

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

הערה: אם משתמשים ב-NotificationManager של המסגרת, חלק מהתכונות של NotificationCompat.WearableExtender לא פועלות, ולכן חשוב להשתמש ב- NotificationCompat.

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

// This intent will be fired as a result of the user clicking the "Open on watch" action.
// However, it executes on the phone, not on the watch. Typically, the Activity should then use
// RemoteActivityHelper to then launch the correct activity on the watch.
val intent = Intent(context, LaunchOnWearActivity::class.java)
val wearPendingIntent = PendingIntent.getActivity(
    context,
    wearRequestCode,
    intent,
    PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)

val openOnWatchAction = NotificationCompat.Action.Builder(
    R.drawable.watch,
    "Open on watch",
    wearPendingIntent
)
    .build()

val wearableExtender = NotificationCompat.WearableExtender()
    // This action will only be shown on the watch, not on the phone.
    // Actions added to the Notification builder directly will not be shown on the watch,
    // because one or more actions are defined in the WearableExtender.
    .addAction(openOnWatchAction)
    // This synchronizes dismissals between watch and phone.
    .setDismissalId(chatId)

val notification = NotificationCompat.Builder(context, channelId)
    // ... set other fields ...
    .extend(wearableExtender)
    .build()

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

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

  1. יוצרים Activity חדש שמרחיב את ConfirmationActivity.
  2. משתמשים ב-RemoteActivityHelper ב-Activity החדש כדי להפעיל את אפליקציית הטלפון.
  3. כשיוצרים את Intent כדי להפעיל את Activity מההתראה, מגדירים את התוסף EXTRA_ANIMATION_TYPE ל-OPEN_ON_PHONE_ANIMATION.
הגישה הזו מנחה את המשתמשים לאינטראקציה בטלפון שלהם ועומדת בדרישות הפלטפורמה להפעלת תהליכים ברקע.

הערה: אי אפשר להשתמש ב-BroadcastReceiver כיעד של פעולת ההתראה.