快速配对配套应用集成

借助快速配对功能,OEM 配套应用可深度集成到配对中, 用户体验。有多个集成点可以选择 可在用户完成快速配对后吸引用户。

在开箱体验期间安装 (OOBE)

借助快速配对功能,用户可以下载耳机的配套应用作为 开箱体验 (OOBE) 的最后一步。此内容会显示在 一条通知,告诉他们配对已完成,他们可以 下载该应用(如果尚未安装),或者打开该应用并启动 使用它。

要开始使用此功能,请将配套应用的软件包名称添加到 设备详细信息,请访问控制台

通过快速配对功能启动的配套应用包含两个额外的数据元素:

  • android.bluetooth.device.extra.DEVICE - 蓝牙设备 触发该通知的操作。
  • com.google.android.gms.nearby.discovery.fastpair.MODEL_ID - a java.lang.String,表示配对的模型 ID 设备。

设置切片集成

Slice 可由 配套应用,进一步增强了设备 蓝牙设置页面。

SliceProvider 必须由配套应用实现,才能提供这些设置 Slice。那里 有两种类型的切片:OOBE 切片和通用设置项。通过 如果用户尚未配置耳机,则应包含 OOBE 切片 ,并且应始终包含其余 Slice,请参阅 如以下代码示例所示:

@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 用于提醒用户完成设备设置; (如果他们尚未在配套应用中执行此操作)。配套应用不得 在用户完成设备设置后再次提供 Slice。

@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 中,配套应用可以提供常用链接 设置。

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

每个 Slice 都需要包含标题、副标题、图标和操作。

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

实现 SliceProvider 后,将以下代码添加到控制台 允许快速配对服务验证它是否正在与正确的应用通信:

固件更新 intent

当所连接设备的固件版本过旧,或 与设备控制台中配置的固件版本不同, 快速配对将通过 com.google.android.gms.nearby.fastpair.ACTION_FIRMWARE_UPDATE_BROADCAST intent 进行升级。此 Intent 包含以下额外信息:

  • com.google.android.gms.nearby.fastpair.EXTRA_LOCAL_FIRMWARE_VERSION,即 所连接设备的固件版本
  • com.google.android.gms.nearby.fastpair.EXTRA_UPDATE_NOTIFICATION_SHOWN,已设置 如果快速配对显示了通知,则发送到 true