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

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

התקנה במהלך ממשק OOBE

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

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

אפליקציות נלוות שהופעלו על ידי ההתאמה המהירה כוללות רכיב נתונים נוסף:

שילוב של פרוסת הגדרות

אפליקציה נלווית יכולה לספק פרוסות כדי לשפר עוד יותר את האפשרויות הזמינות בדף הגדרות ה-Bluetooth במכשיר.

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

@Nullable
@Override
public Slice onBindSlice(Uri sliceUri) {
  String address = sliceUri.getQueryParameter("addr");
  if (address == null) {
    return null;
  }
  String path = sliceUri.getPathSegments().get(/* index= */ 0);
  if ("settings_slice".equals(path)) {
    return createSettingSlice(sliceUri, address);
  } else if ("oobe_slice".equals(path)) {
    return createOobeReminderSlice(sliceUri, address);
  }
  return null;
}

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

@Nullable
private Slice createOobeReminderSlice(Uri sliceUri, String address) {
  if (!deviceHasGoneThroughOobe(address)) {
    ListBuilder listBuilder =
        new ListBuilder(context, sliceUri, ListBuilder.INFINITY);
    addOobeSlice(listBuilder, context, address);
    return listBuilder.build();
  }
  return null;
}

private static void addOobeSlice(
    ListBuilder listBuilder, Context context, String address) {
  listBuilder.addRow(
      createRow(
          context,
          R.drawable.icon_oobe,
          R.string.title_oobe,
          R.string.summary_oobe,
          R.string.label_oobe,
          createOobePendingIntent(context, address)));
}

setting_slice הוא המקום שבו אפליקציות נלוות יכולות לספק קישורים להגדרות נפוצות.

private Slice createSettingSlice(Uri sliceUri, String address) {
  ListBuilder listBuilder =
      new ListBuilder(context, sliceUri, ListBuilder.INFINITY);
  // TODO: Add your customized slice here.
  addRow1(listBuilder, context, address);
  addRow2(listBuilder, context, address);
  return listBuilder.build();
}

private static void addRow1(
    ListBuilder listBuilder, Context context, String address) {
  listBuilder.addRow(
      createRow(
          context,
          R.drawable.fp_slice_row1_icon,
          R.string.fp_slice_row1_title_gestures,
          R.string.fp_slice_row1_summary_gestures,
          R.string.fp_slice_row1_label_gestures,
          createPendingIntent(context, address)));
}

private static void addRow2(
    ListBuilder listBuilder, Context context, String address) {
  ...
}

לכל פרוסה צריכה להיות כותרת, כותרת משנה, סמל ופעולה.

private static RowBuilder createRow(
    Context context,
    @DrawableRes int iconId,
    @StringRes int titleId,
    @StringRes int summaryId,
    @StringRes int actionTitleId,
    PendingIntent pendingIntent) {
  SliceAction action =
      SliceAction.createDeeplink(
          pendingIntent,
          IconCompat.createWithResource(context, iconId),
          ListBuilder.ICON_IMAGE,
          context.getString(actionTitleId));
  return new RowBuilder()
      .setTitleItem(
          IconCompat.createWithResource(context, iconId),
          ListBuilder.ICON_IMAGE)
      .setTitle(context.getString(titleId))
      .setSubtitle(context.getString(summaryId))
      .setPrimaryAction(action);
}

מוסיפים את הקוד הבא למסוף אחרי ההטמעה של SliceProviderכדי לאשר לשירות ההתאמה המהירה לוודא שהוא מתקשר עם האפליקציה הנכונה:

Intent של עדכון קושחה

כשגרסת הקושחה של מכשיר מחובר לא עדכנית, או שהיא שונה לחלוטין מגרסת הקושחה שהוגדרה במסוף המכשיר, התכונה 'התאמה מהירה' תיידע את האפליקציה הנלווית עם Intent מסוג com.google.android.gms.nearby.fastpair.ACTION_FIRMWARE_UPDATE_BROADCAST אחרי בדיקה של גרסת הקושחה. Intent כולל את הפרטים הנוספים הבאים:

  • com.google.android.gms.nearby.fastpair.EXTRA_LOCAL_FIRMWARE_VERSION, גרסת הקושחה של המכשיר המחובר
  • com.google.android.gms.nearby.fastpair.EXTRA_UPDATE_NOTIFICATION_SHOWN, מוגדר ל-true אם הופיעה התראה מההתאמה המהירה