借助快速配对功能,OEM 配套应用可深度集成到配对中, 用户体验。有多个集成点可以选择 可在用户完成快速配对后吸引用户。
在开箱体验期间安装 (OOBE)
借助快速配对功能,用户可以下载耳机的配套应用作为 开箱体验 (OOBE) 的最后一步。此内容会显示在 一条通知,告诉他们配对已完成,他们可以 下载该应用(如果尚未安装),或者打开该应用并启动 使用它。
要开始使用此功能,请将配套应用的软件包名称添加到 设备详细信息,请访问控制台。
通过快速配对功能启动的配套应用包含两个额外的数据元素:
android.bluetooth.device.extra.DEVICE
- 蓝牙设备 触发该通知的操作。com.google.android.gms.nearby.discovery.fastpair.MODEL_ID
- ajava.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
后,将以下代码添加到控制台
允许快速配对服务验证它是否正在与正确的应用通信:
- 提供方的授权
- 配套应用的公开 signature
SHA-256
摘要- 您可以使用 apksigner 来获取 SHA-256 摘要。
固件更新 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