Integrazione rapida app complementare

L'accoppiamento rapido consente alle app companion OEM di essere integrate profondamente nell'esperienza di accoppiamento e utilizzo. Se vuoi, puoi utilizzare più punti di integrazione per coinvolgere gli utenti al termine dell'accoppiamento rapido.

Installazione durante l'esperienza out-of-box (OOBE)

L'accoppiamento rapido consente agli utenti di scaricare l'app complementare per le cuffie come ultimo passaggio dell'esperienza Out-of-Box (OOBE). Questo viene presentato all'utente in una notifica in cui viene comunicato che l'accoppiamento è terminato e che può scaricare l'app, se non è già installata, oppure aprire l'app e iniziare a utilizzarla.

Per iniziare a utilizzare questa funzionalità, aggiungi il nome del pacchetto dell'app complementare ai dettagli del dispositivo nella console.

Le app companion lanciate dall'accoppiamento rapido includono un elemento di dati aggiuntivo:

Integrazione della sezione Impostazioni

Le sezioni possono essere fornite da un'app complementare per migliorare ulteriormente le opzioni disponibili nella pagina delle impostazioni Bluetooth di un dispositivo.

Per fornire le sezioni di queste impostazioni, è necessario implementare uno strumento SliceProvider da un'app complementare. Sono disponibili due tipi di sezioni: una sezione OOBE e elementi di impostazioni generiche. La sezione OOBE deve essere inclusa se l'utente non ha ancora configurato le cuffie nell'app complementare e le sezioni rimanenti devono essere sempre incluse. Consulta l'esempio di codice riportato di seguito:

@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 viene utilizzato per ricordare agli utenti di completare la configurazione del dispositivo, se non l'hanno ancora fatto nell'app complementare. L'app complementare non deve fornire di nuovo la sezione dopo che l'utente ha completato la configurazione del 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 è la piattaforma in cui le app companion possono fornire link a impostazioni di uso comune.

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

Ogni sezione deve includere un titolo, un sottotitolo, un'icona e un'azione.

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

Aggiungi quanto segue alla console dopo l'implementazione di SliceProvider per consentire al servizio di accoppiamento rapido di verificare che stia comunicando con l'app corretta:

Intento aggiornamento firmware

Quando la versione del firmware di un dispositivo connesso non è aggiornata o che pronuncia esattamente la versione del firmware configurata nella console del dispositivo, l'accoppiamento rapido invia una notifica all'app complementare con un intent com.google.android.gms.nearby.fastpair.ACTION_FIRMWARE_UPDATE_BROADCAST dopo un controllo della versione del firmware. L'intent include le seguenti informazioni aggiuntive:

  • com.google.android.gms.nearby.fastpair.EXTRA_LOCAL_FIRMWARE_VERSION, la versione del firmware del dispositivo connesso
  • com.google.android.gms.nearby.fastpair.EXTRA_UPDATE_NOTIFICATION_SHOWN, impostato su true se la funzionalità Accoppiamento rapido mostra una notifica