Integração de app complementar com Pareamento rápido

O Pareamento rápido permite que os apps complementares de OEM sejam profundamente integrados à experiência de pareamento e uso. Há vários pontos de integração que podem ser usados para engajar os usuários após a conclusão do Pareamento rápido.

Instalação durante a experiência inicial

Com o Pareamento rápido, os usuários podem fazer o download do app complementar para os fones de ouvido como a etapa final da experiência pronta para uso (OOBE, na sigla em inglês). Isso é apresentado ao usuário em uma notificação informando que o pareamento foi concluído e que ele pode fazer o download do app, se ele ainda não estiver instalado, ou abrir o app e começar a usá-lo.

Para começar a usar esse recurso, adicione o nome do pacote do app complementar aos detalhes do dispositivo no console.

Os apps complementares iniciados pelo Pareamento rápido incluem um elemento de dados extra:

Integração da fração de configurações

As Slices podem ser fornecidas por um app complementar para melhorar ainda mais as opções disponíveis na página de configurações de Bluetooth de um dispositivo.

Um SliceProvider precisa ser implementado por um app complementar para fornecer essas frações de configurações. Há dois tipos de frações disponíveis: uma fração de OOBE e itens de configurações genéricas. A fração OOBE precisa ser incluída se o usuário ainda não tiver configurado o fone de ouvido no app complementar e as fatias restantes sempre precisam ser incluídas. Consulte o exemplo de código abaixo:

@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 é usado para lembrar os usuários de concluir a configuração do dispositivo, caso ainda não tenha feito isso no app complementar. O app complementar não pode fornecer a fatia novamente depois que o usuário concluir a configuração do dispositivo.

@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 é onde os apps complementares podem fornecer links para configurações usadas com frequência.

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

Cada Slice precisa ter título, subtítulo, ícone e ação.

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

Adicione o código abaixo ao console depois de implementar SliceProvider para permitir que o serviço de Pareamento rápido verifique se está se comunicando com o app correto:

Intent de atualização do firmware

Quando a versão do firmware de um dispositivo conectado está desatualizada ou falando precisamente diferente da versão do firmware configurada no console do dispositivo, o Pareamento rápido notifica o app complementar com uma intent com.google.android.gms.nearby.fastpair.ACTION_FIRMWARE_UPDATE_BROADCAST após uma verificação da versão do firmware. A intent tem as seguintes informações extras:

  • com.google.android.gms.nearby.fastpair.EXTRA_LOCAL_FIRMWARE_VERSION, a versão de firmware do dispositivo conectado
  • com.google.android.gms.nearby.fastpair.EXTRA_UPDATE_NOTIFICATION_SHOWN, definido como true se o Pareamento rápido mostrar uma notificação.