安卓11开发者蓝牙怎么设置密码

在 Android 11 中,开发者可以使用 BluetoothGattServer 来创建一个蓝牙从设备。常见的场景是把 Android 设备作为一个蓝牙外设,通过蓝牙连接后可以进行数据传输,或者下发指令控制某些硬件设备。

但是,建立安全连接显然是蓝牙从设备必须要支持的功能之一。在 BluetoothGattServer 中,设置连接密码可以保证数据传输的安全性。本篇文章具体介绍了在 Android 11 上如何创建 BluetoothGattServer,并且如何设置连接密码,保证数据传输的安全性。

1. 创建 BluetoothGattServer

首先创建一个 BluetoothGattServer 对象:

```

BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);

BluetoothGattServer gattServer = bluetoothManager.openGattServer(getApplicationContext(), new BluetoothGattServerCallback() {...});

```

创建 BluetoothGattServer 需要注意的事项:

- SO_REUSEPORT

蓝牙监听的端口号是 6,需要使用 SO_REUSEPORT 参数保证 Android 底层蓝牙协议栈不会占用这个端口号。

- BluetoothGattServerCallback

BluetoothGattServerCallback 是回调监听类,用来处理连接事件、数据传输事件以及连接状态改变事件等。

2. 设置连接密码

在 Android 11 中,设置连接密码也很简单,只需要在 BluetoothGattCharacteristic 中设置。在这里设置密码需要的步骤:

- 构建一个 BluetoothGattCharacteristic 对象,设置 UUID 和属性等。

```

BluetoothGattCharacteristic characteristic = new BluetoothGattCharacteristic(UUID.fromString("00002a03-0000-1000-8000-00805f9b34fb"), BluetoothGattCharacteristic.PROPERTY_WRITE, BluetoothGattCharacteristic.PERMISSION_READ | BluetoothGattCharacteristic.PERMISSION_WRITE);

```

- 设置密码值

. 在 characteristic 中设置密码值,密码为 "123456"。

```

characteristic.setValue("123456");

```

- 添加 characteristic 到 BluetoothGattServer

在 BluetoothGattServer 中使用 addService 添加 characteristic。

```

BluetoothGattService service = new BluetoothGattService(UUID.fromString("00002a03-0000-1000-8000-00805f9b34fb"), BluetoothGattService.SERVICE_TYPE_PRIMARY);

service.addCharacteristic(characteristic);

gattServer.addService(service);

```

整个设置密码的过程就是这些,当连接到这个 BluetoothGattServer 时,需要使用密码进行安全连接。

3. 安全连接

在连接 BluetoothGattServer 时,需要通过 connectGatt 方法来建立连接。密码验证是在连接建立后进行的,可以通过 BluetoothGattCallback 的 onCharacteristicWrite 和 onConnectionStateChange 回调方法来处理密码验证的逻辑。

- 这里仍需要构建一个 BluetoothGattCallback 对象,处理 connectGatt 回调事件。

```

BluetoothGattCallback gattCallback = new BluetoothGattCallback() {...}

```

- 建立连接

```

BluetoothDevice device = bluetoothAdapter.getRemoteDevice(address);

BluetoothGatt gatt = device.connectGatt(context, false, gattCallback);

```

- 密码验证

在 onCharacteristicWrite 中验证是否输入了正确的密码。

```

@Override

public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {

super.onCharacteristicWrite(gatt, characteristic, status);

if (characteristic.equals(passwordCharacteristic)){

byte[] value = characteristic.getValue();

if (Arrays.equals(value, "123456".getBytes())){

Log.i(TAG, "Passkey correct, start bonding.");

gatt.setCharacteristicNotification(passwordCharacteristic, false);

gattCallback.onStartBonding(gatt, BluetoothDevice.BONDING_VARIANT_PASSKEY_CONFIRMATION, value);

} else {

Log.i(TAG, "Passkey incorrect, disconnect.");

gatt.disconnect();

}

}

}

```

- 断开连接

```

gatt.disconnect();

```

这样就能成功连接设备了。当输入的密码和设备预设密码一致时,会进入绑定状态,可以在 BluetoothGattCallback 的 onBondStateChanged 中处理。

```

@Override

public void onBondStateChanged(BluetoothDevice device, int prevState, int newState) {

super.onBondStateChanged(device, prevState, newState);

if (newState == BluetoothDevice.BOND_BONDED){

Log.i(TAG, "Bonding complete.");

// do something ...

}

}

```

这篇文章介绍了在 Android11 下通过 BluetoothGattServer 和 BluetoothGattCallback 的方式创建一个蓝牙从设备,并且如何通过输入密码进行安全连接的方法。在具体开发中,可以根据实际情况改变最后的连接以及断开连接的逻辑。


相关知识:
安卓 驱动 开发
安卓驱动开发是指针对安卓操作系统的设备驱动程序开发。驱动程序是操作系统的一部分,目的是为了让操作系统能够直接控制计算机硬件。安卓驱动开发是一个很重要的领域,因为它能够帮助人们充分利用安卓设备的性能,并将其应用于各种场景。安卓驱动开发最基本的概念是驱动程序。
2023-05-23
socks5安卓开发
Socks5是一种网络协议,其主要功能是将网络流量从客户端传输到服务器端,并为客户端与服务器之间的通信提供安全性和匿名性。在Android开发中,开发人员可以利用Socks5协议来创建一个VPN应用或浏览器插件,以提供更安全和更加保护用户隐私的网络服务。S
2023-05-23
qt安卓开发
Qt是一款跨平台的C++图形用户界面应用程序框架,非常适合开发嵌入式、桌面和移动设备应用程序。Qt具有很好的跨平台性,能够轻松扩展应用程序范围,同时也提供了一些API和功能,让开发者能够轻松开发出高效、优质和精致的应用程序。Qt还针对移动设备开发,具有比较
2023-05-23
net可以开发安卓系统吗
.Net框架是一组微软公司开发的技术,被广泛应用于企业级应用程序的开发中,在互联网领域也有着广泛的应用。此外,.Net开发技术也可以用于移动开发,在Windows Phone平台和Xamarin平台中均可以使用。但是,是否可以用.Net开发安卓系统呢?这个
2023-05-23
idea开发安卓dashboard应用
Dashboard是一个数据可视化的仪表盘,用于收集和显示关键业务指标和分析数据,以便用户快速了解业务状态和趋势。在Android应用中,开发一个Dashboard应用可以帮助用户实时监控业务数据,快速有效地作出决策。为了开发一个Android Dashb
2023-05-23
flutter可以开发安卓吗
Flutter是一种在单个代码库中构建高性能的、令人愉悦的、原生应用程序的全新方法。Flutter的目标是提供一种高效、快速的方式来构建高质量、高度定制的用户体验。Flutter专为移动应用程序设计而生,同时还可以用于Web和桌面应用程序。Flutter是
2023-05-23
论坛app安卓开发
论坛是一种以主题讨论为基础的社交平台,用户可以在此发布帖子、回复他人的帖子以及就某一话题进行讨论。论坛app就是一种让用户可以在移动设备上方便地使用论坛的应用程序。下面我们就来介绍一下论坛app的安卓开发原理。一、开发环境和工具1.操作系统:Windows
2023-04-28
舟山安卓app定制开发
标题:舟山安卓App定制开发:原理与详细介绍导语:随着移动设备的普及,安卓App已经成为了现代社会中许多企业与个人的必备工具。在这篇文章中,我们将对舟山安卓App定制开发的原理和细节进行深入的探讨,帮助有需求的人员了解有关开发过程和注意事项。正文:一、安卓
2023-04-28
安卓手机app开发周期多少天
安卓手机APP的开发周期因项目的复杂度、开发团队规模、技术水平、需求变化等因素而有所不同。一般来说,APP开发分为以下几个阶段:1.需求分析阶段需求分析是一个项目开发中最重要的阶段,因为这个阶段的准确性直接关系到后续开发和测试的进展。在此阶段,开发团队需要
2023-04-28
安卓app应用制作
安卓APP应用制作的原理是通过使用Java语言开发,借助Android SDK和Android Studio等开发工具。下面是详细的制作流程介绍:1. 学习Java编程语言在制作安卓应用之前,你需要先掌握Java编程语言。Java是一门跨平台的编程语言,不
2023-04-28
安卓app修改后打包
安卓app的修改和打包通常有两种方式:1. 反编译 + 修改 + 编译打包这种方式需要用到反编译工具,如apktool、dex2jar等,将原始的apk反编译成smali语言或Java源代码,进行修改后再编译成dex格式,再使用apktool等工具打包成a
2023-04-28
安卓 app怎么制作
制作安卓 app 的原理是基于 Java 语言和 Android 操作系统进行开发,以下是详细的制作流程:1. 准备工作:需要在电脑上安装 Java 开发工具包(JDK)、Android Studio 集成开发环境,以及 Android SDK 和 Goo
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1