Integrazione rapida app complementare

L'accoppiamento rapido consente alle app complementari OEM di essere profondamente integrate nell'accoppiamento e esperienza di utilizzo delle applicazioni. Facoltativamente, sono disponibili più punti di integrazione utilizzati per coinvolgere gli utenti dopo che hanno terminato l'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 l'ultimo passaggio dell'esperienza out-of-box (OOBE). Viene presentato all'utente in una notifica che lo informa che l'accoppiamento è terminato e che possono scarica l'app se non è già installata oppure apri l'app e avvia utilizzandolo.

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

Le app companion lanciate dall'accoppiamento rapido includono due elementi di dati aggiuntivi:

  • android.bluetooth.device.extra.DEVICE - il dispositivo Bluetooth che ha attivato la notifica.
  • com.google.android.gms.nearby.discovery.fastpair.MODEL_ID - un java.lang.String che rappresenta l'ID modello della coppia dispositivo.

Integrazione della sezione Impostazioni

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

Un SliceProvider Deve essere implementato da un'app complementare per fornire queste sezioni di impostazioni. Là Sono disponibili due tipi di sezioni: una sezione OOBE e elementi con impostazioni generiche. La La sezione OOBE deve essere inclusa se l'utente non ha ancora configurato il visore nell'app complementare e le sezioni rimanenti devono essere sempre incluse, consulta nell'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'ha ancora fatto nell'app complementare. L'app complementare non deve fornisci di nuovo la sezione al termine della configurazione del dispositivo da parte dell'utente.

@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 posizione in cui le app companion possono fornire link a pagine di uso comune impostazioni.

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 contenere titolo, sottotitolo, icona e 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 aver implementato SliceProviderper consenti al servizio di accoppiamento rapido di verificare che stia comunicando con l'app corretta:

Intent di aggiornamento firmware

Quando la versione del firmware di un dispositivo connesso è obsoleta o non è aggiornata in modo preciso è diversa dalla versione firmware configurata nella console del dispositivo, Accoppiamento rapido invierà una notifica all'app complementare con un com.google.android.gms.nearby.fastpair.ACTION_FIRMWARE_UPDATE_BROADCAST Intenzione dopo un controllo della versione del firmware. L'intent contiene le seguenti informazioni aggiuntive:

  • com.google.android.gms.nearby.fastpair.EXTRA_LOCAL_FIRMWARE_VERSION, versione firmware del dispositivo connesso
  • com.google.android.gms.nearby.fastpair.EXTRA_UPDATE_NOTIFICATION_SHOWN, impostato a true se per l'accoppiamento rapido è mostrata una notifica
di Gemini Advanced.