Integracja z aplikacją towarzyszącą Szybkie parowanie

Szybkie parowanie umożliwia ścisłą integrację aplikacji towarzyszących OEM z procesem parowania i użytkowania. Istnieje wiele punktów integracji, których można opcjonalnie użyć do angażowania użytkowników po zakończeniu Szybkiego parowania.

Instalacja wyjątkowa

Szybkie parowanie umożliwia użytkownikom pobranie aplikacji towarzyszącej do zestawu słuchawkowego. Jest to ostatni etap gotowej wersji do pracy (OOBE). Użytkownik jest informowany o zakończeniu parowania i że może pobrać aplikację, jeśli nie jest jeszcze zainstalowana, lub ją otworzyć i zacząć z niej korzystać.

Aby zacząć korzystać z tej funkcji, dodaj nazwę pakietu aplikacji towarzyszącej do szczegółów urządzenia w konsoli.

Aplikacje towarzyszące uruchamiane przez Szybkie parowanie zawierają dodatkowy element danych:

Integracja wycinka ustawień

Wycinki mogą być dostarczane przez aplikację towarzyszącą, aby wzbogacać opcje dostępne na stronie ustawień Bluetooth urządzenia.

Aby można było udostępnić te wycinki ustawień, aplikacja towarzysząca musi zaimplementować parametr SliceProvider. Dostępne są 2 rodzaje wycinków: wycinek OOBE i ogólne elementy ustawień. Wycinek OOBE powinien być uwzględniony, jeśli użytkownik nie skonfigurował jeszcze zestawu słuchawkowego w aplikacji towarzyszącej, a pozostałe fragmenty powinny być zawsze uwzględniane. Zobacz przykładowy kod poniżej:

@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;
}

Parametr oobe_slice służy do przypomnienia użytkownikom o konieczności dokończenia konfiguracji urządzenia, jeśli nie zrobili tego jeszcze w aplikacji towarzyszącej. Aplikacja towarzysząca nie może ponownie udostępniać wycinka, gdy użytkownik zakończy konfigurowanie urządzenia.

@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 to pole, w którym aplikacje towarzyszące mogą zawierać linki do często używanych ustawień.

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) {
  ...
}

Każdy wycinek musi mieć tytuł, podtytuł, ikonę i działanie.

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);
}

Po zaimplementowaniu metody SliceProvider dodaj do konsoli ten kod, aby umożliwić usłudze Szybkie parowanie sprawdzanie, czy komunikuje się ona z właściwą aplikacją:

Intencja aktualizacji oprogramowania

Gdy wersja oprogramowania układowego podłączonego urządzenia jest nieaktualna lub mówi inaczej niż wersja ta skonfigurowana w konsoli urządzenia, po sprawdzeniu wersji oprogramowania Szybkie parowanie powiadomi aplikację towarzyszącą z intencją com.google.android.gms.nearby.fastpair.ACTION_FIRMWARE_UPDATE_BROADCAST. Intencja zawiera te dodatkowe informacje:

  • com.google.android.gms.nearby.fastpair.EXTRA_LOCAL_FIRMWARE_VERSION, wersja oprogramowania połączonego urządzenia
  • com.google.android.gms.nearby.fastpair.EXTRA_UPDATE_NOTIFICATION_SHOWN, ustaw wartość true, jeśli Szybkie parowanie wyświetli powiadomienie