后台通信

本指南概述了如何在应用在后台运行时支持与外围设备通信的关键用例。

有多种选项可以支持每个用例。每个选项都有优缺点,这可能使其或多或少地适合您的特定需求。

下图显示了本页面指导的简化视图。

查找设备

首先,您的应用需要查找要连接的设备。要查找 BLE 设备,您可以使用以下任一 API

在后台

当应用不可见时,使用这两个 API 均无限制,但它们都需要您的应用进程处于活动状态。如果应用进程未运行,您可以使用以下解决方法。

连接到设备

在找到设备后要连接到它,您需要从以下来源之一获取该设备的 BluetoothDevice 实例。

获得 BluetoothDevice 实例后,您可以通过调用 connectGatt() 方法之一来启动到相应设备的连接请求。您传递给 autoConnect 布尔值的值定义了 GATT 客户端使用的以下两种连接模式中的哪一种。

  • 直接连接autoconnect = false):尝试直接连接到外围设备,如果设备不可用则失败。如果断开连接,GATT 客户端不会自动尝试重新连接。
  • 自动连接autoconnect = true):只要外围设备可用,就尝试自动连接到它。如果外围设备启动断开连接或因外围设备超出范围而导致断开连接,则当外围设备可用时,GATT 客户端会自动尝试重新连接。

在后台

在应用处于后台时,连接到设备没有限制,尽管如果您的进程被终止,连接将被关闭。此外,从后台启动活动(在 Android 10 及更高版本中)或前台服务(在 Android 12 及更高版本中)存在 限制

因此,要在后台执行连接,应用可以使用以下解决方案。

保持与设备的连接

理想情况下,应用应仅在必要时才维护与外围设备的连接,并在任务完成后断开连接。但是,在以下两种情况下,应用可能需要无限期地保持连接。

在这两种情况下,都可以使用以下选项。

在应用之间切换时

查找设备、连接到它以及传输数据既耗时又消耗资源。为了避免每次用户在应用之间切换或执行同时任务时都丢失连接并必须执行完整过程,您应保持连接处于活动状态,直到操作完成。您可以使用带有 connectedDevice 类型的或 伴侣设备存在 API 的前台服务。

在侦听外围设备通知时

要侦听外围设备通知,应用必须调用 setCharacteristicNotification(),使用 onCharacteristicChanged() 侦听回调,并保持连接处于活动状态。对于大多数应用,最好使用 CompanionDeviceService 来支持此用例,因为应用可能需要长时间侦听。但是,您也可以使用前台服务。

在这两种情况下,您都可以按照 连接到设备 部分中的说明在进程终止后重新连接。