设置蓝牙

在您的应用能够通过蓝牙或蓝牙低功耗进行通信之前,您需要验证设备是否支持蓝牙,如果是,则确保已启用蓝牙。请注意,仅当 android:required 属性在 <uses-feature.../> 清单文件条目中设置为 false 时,才需要进行此检查。

如果设备不支持蓝牙,则应优雅地禁用所有蓝牙功能。如果设备支持蓝牙但未启用,则可以请求用户在不离开应用的情况下启用蓝牙。

第一步是在清单文件中添加蓝牙权限,以便使用以下 API。

权限到位后,可以使用 BluetoothAdapter 分两步完成蓝牙设置。

  1. 获取 BluetoothAdapter

    BluetoothAdapter 是任何和所有蓝牙活动所必需的。BluetoothAdapter 代表设备自己的蓝牙适配器(蓝牙无线电)。要获取 BluetoothAdapter,您首先需要拥有 Context。使用此上下文获取 BluetoothManager 系统服务的实例。调用 BluetoothManager#getAdapter 将为您提供一个 BluetoothAdapter 对象。如果 getAdapter() 返回 null,则表示设备不支持蓝牙。

    例如

    Kotlin

    val bluetoothManager: BluetoothManager = getSystemService(BluetoothManager::class.java)
    val bluetoothAdapter: BluetoothAdapter? = bluetoothManager.getAdapter()
    if (bluetoothAdapter == null) {
      // Device doesn't support Bluetooth
    }

    Java

    BluetoothManager bluetoothManager = getSystemService(BluetoothManager.class);
    BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();
    if (bluetoothAdapter == null) {
      // Device doesn't support Bluetooth
    }
  2. 启用蓝牙。

    接下来,您需要确保蓝牙已启用。调用 isEnabled() 检查蓝牙当前是否已启用。如果此方法返回 false,则表示蓝牙已禁用。要请求启用蓝牙,请调用 startActivityForResult(),并传入一个 ACTION_REQUEST_ENABLE 意图操作。此调用会通过系统设置(不会停止您的应用)发出启用蓝牙的请求。

    例如

    Kotlin

    if (bluetoothAdapter?.isEnabled == false) {
      val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
      startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT)
    }

    Java

    if (!bluetoothAdapter.isEnabled()) {
      Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
      startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
    }

将出现一个对话框,请求用户许可以启用蓝牙,如图 1 所示。如果用户授予许可,系统将开始启用蓝牙,并且一旦该过程完成(或失败),焦点将返回到您的应用。


图 1. 启用蓝牙对话框。

传递给 startActivityForResult()REQUEST_ENABLE_BT 常量是本地定义的整数,必须大于或等于 0。系统会在您的 onActivityResult() 实现中将其作为 requestCode 参数传递回给您。

如果启用蓝牙成功,您的活动将在 onActivityResult() 回调中收到 RESULT_OK 结果代码。如果由于错误(或用户响应“拒绝”)而未启用蓝牙,则结果代码为 RESULT_CANCELED

可选地,您的应用还可以侦听 ACTION_STATE_CHANGED 广播意图,系统在蓝牙状态发生变化时会广播此意图。此广播包含额外字段 EXTRA_STATEEXTRA_PREVIOUS_STATE,分别包含新的和旧的蓝牙状态。这些额外字段的可能值为 STATE_TURNING_ONSTATE_ONSTATE_TURNING_OFFSTATE_OFF。如果您的应用需要检测对蓝牙状态进行的运行时更改,侦听此广播会很有用。

提示:启用可发现性会自动启用蓝牙。如果您计划在执行蓝牙活动之前始终启用设备可发现性,则可以跳过前面步骤中的步骤 2。

设备上启用蓝牙后,您可以同时使用蓝牙经典和蓝牙低功耗。

对于蓝牙经典,您可以 查找蓝牙设备连接到蓝牙设备

对于蓝牙低功耗,您可以 查找 BLE 设备连接到 GATT 服务器 以及 传输 BLE 数据