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

O Pareamento rápido permite que os apps complementares OEM sejam totalmente integrados ao pareamento e experiência de uso do produto. Há vários pontos de integração que podem ser usada para engajar os usuários depois que eles terminam o Pareamento rápido.

Instalação durante a experiência inicial (OOBE, na sigla em inglês)

O Pareamento rápido permite que os usuários façam o download do app complementar para o fone de ouvido como etapa final da experiência pronta para uso (OOBE, na sigla em inglês). Isso é apresentado ao usuário uma notificação informando que o pareamento terminou e que é possível faça o download do app, caso ele ainda não esteja instalado, ou abra o app e comece usá-lo.

Para começar a usar este recurso, adicione o nome do pacote do aplicativo complementar ao detalhes do dispositivo no console.

Os apps complementares iniciados pelo Pareamento rápido incluem dois elementos de dados extras:

  • android.bluetooth.device.extra.DEVICE: o dispositivo Bluetooth que acionou a notificação.
  • com.google.android.gms.nearby.discovery.fastpair.MODEL_ID: um java.lang.String que representa o ID do modelo do par dispositivo.

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

Slices podem ser fornecidos por um aplicativo complementar para melhorar ainda mais as opções disponíveis no sistema Página de configurações de Bluetooth.

Um SliceProvider. deve ser implementado por um aplicativo complementar para fornecer essas frações de configurações. dois tipos de frações estão disponíveis: uma fração OOBE e itens de configurações genéricos. A Uma fração OOBE deve ser incluída se o usuário ainda não tiver configurado o fone de ouvido no aplicativo complementar e as frações restantes devem sempre 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 terminar a configuração do dispositivo, caso ainda não tenham feito isso no app complementar. O aplicativo complementar não pode forneça a fração novamente após 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 os links dos itens mais usados configurações.

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 seguinte ao console depois de implementar SliceProvider para permitir que o serviço de Pareamento rápido verifique se ele 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 diferente da versão do firmware configurada no console do dispositivo, O Pareamento rápido notifica o app complementar com uma Intenção com.google.android.gms.nearby.fastpair.ACTION_FIRMWARE_UPDATE_BROADCAST após a 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, o versão do firmware do dispositivo conectado
  • com.google.android.gms.nearby.fastpair.EXTRA_UPDATE_NOTIFICATION_SHOWN, definido para true se o Pareamento rápido tiver mostrado uma notificação
.