Android NDK开发详解连接性之设置蓝牙

Android NDK开发详解连接性之设置蓝牙

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

如果不支持蓝牙,则应正常停用所有蓝牙功能。如果支持蓝牙但已停用,您可以请求用户在不离开应用的情况下启用蓝牙。

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

权限设置好后,系统会使用 BluetoothAdapter 分两步完成蓝牙设置:

获取 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
}

启用蓝牙。

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

例如:
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 参数传回给您。

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

您的应用还可以选择监听 ACTION_STATE_CHANGED 广播 intent,每当蓝牙状态发生变化时,系统都会广播此 intent。此广播包含 extra 字段 EXTRA_STATE 和 EXTRA_PREVIOUS_STATE,分别包含新旧蓝牙状态。这些额外字段的可能值包括 STATE_TURNING_ON、STATE_ON、STATE_TURNING_OFF 和 STATE_OFF。如果您的应用需要检测对蓝牙状态做出的运行时更改,则监听此广播会非常有用。
提示:启用可检测性会自动启用蓝牙。如果您计划在执行蓝牙 activity 之前始终启用设备可检测性,则可以跳过前面步骤中的第 2 步。

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

对于传统蓝牙,您可以查找蓝牙设备并连接到蓝牙设备。

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

本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。

最后更新时间 (UTC):2023-11-11。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五一编程

程序之路有我与你同行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值