安卓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 的方式创建一个蓝牙从设备,并且如何通过输入密码进行安全连接的方法。在具体开发中,可以根据实际情况改变最后的连接以及断开连接的逻辑。


相关知识:
安卓9
在安卓设备中,开发者模式是一个非常重要的设置,它为开发人员提供了众多的调试选项和工具来优化应用程序的性能和稳定性。如果你是一个开发人员或想更好地控制你的设备,那你肯定需要开启安卓系统的开发者模式。接下来将为您介绍安卓9.0如何进入开发者模式的原理和详细步骤
2023-05-23
安装安卓开发环境搭建
要搭建安卓开发环境,需要安装以下几个软件:1. Java JDK:这是安卓开发所必需的开发工具包。Java JDK提供了Java编译器、toolkits以及Java API等功能。2. Android SDK:这是安卓开发所必需的软件开发工具包。Andro
2023-05-23
eclipse安卓开发用哪个
Eclipse是一个开源的集成开发环境(IDE),它被广泛用于Java等编程语言的开发,同时也可以用于安卓应用程序的开发。而安卓开发主要是使用Eclipse的ADT插件来实现的。ADT插件是基于Eclipse的,专门用来开发安卓应用程序的插件,集成了And
2023-05-23
deveco studio可以开发安卓吗
Deveco Studio是一种基于Java语言的应用程序开发环境。它能够支持安卓应用程序的设计、开发和测试。因为它非常容易上手,所以即使没有专业的技能也能快速地学习和使用它。现在让我们来看看Deveco Studio可以如何开发安卓。首先,您需要一个安卓
2023-05-23
c语言用什么开发安卓
C语言是一种非常流行的编程语言,在计算机领域中应用广泛。在移动设备领域中,安卓系统是目前最为流行的操作系统之一。许多人往往想知道是否可以使用C语言来编写安卓应用程序。在本文中,我们将讨论使用C语言开发安卓应用程序的原理和详细介绍。首先,我们需要了解一些基本
2023-05-23
b4a开发安卓
B4A是一款基于VB语言的安卓开发工具,可以用于快速开发安卓应用程序,并且无需编写Java代码。它采用的是类似于VB的基础语言,编写起来非常简单易懂,这也是B4A能够广受欢迎的原因之一。B4A的工作原理是将VB语言编写的程序编译成Java程序,然后通过Ja
2023-05-23
android安卓开发常用
Android作为目前全球使用最广泛的移动操作系统,其开发对于程序员来说具有很高的价值。从安卓开发的基本原理到详细介绍常用的开发框架和工具,都是安卓开发者需要了解的重要内容。一、基础原理1. Android运行机制Android系统是一个基于Linux的开
2023-05-23
29岁了想转行学习安卓开发该如何
作为一个想要转行学习安卓开发的人,你需要掌握一些基础知识才能够从头开始学习安卓开发。在这篇文章中,我们将详细介绍安卓开发的原理和基础知识。一、安卓开发的原理安卓开发主要是基于Java编程语言,通过Google提供的安卓开发工具包(Android SDK),
2023-05-23
安卓社区app开发
安卓社区App的开发需要掌握安卓开发相关技术,以下是开发的基本原理和流程:1.需求分析阶段在这个阶段,重点要解决的问题是确定要开发的安卓社区App的具体功能和需求,包括App的基本设计、定位、功能、交互等方面。2.系统设计阶段根据需求分析结果,完成系统设计
2023-04-28
安卓电商app开发中心
标题:Android电商APP开发教程:从原理到实战详细介绍摘要:本篇文章将带领你了解Android电商APP开发的基本原理以及全面介绍关键技术和实战案例,帮助你快速入门电商APP开发。一、Android电商APP开发的原理1. 概述在移动互联网时代,越来
2023-04-28
基于安卓的智慧旅游app开发
基于安卓的智慧旅游App开发: 原理和详细介绍智慧旅游App是一款针对旅游者和旅游业进行信息整合、提供个性化服务的应用程序。该类应用程序能够让用户轻松规划旅行、查找目的地景点、预订住宿和交通、分享旅行体验等。下面是基于安卓的智慧旅游App开发的原理和详细介
2023-04-28
使用qt 开发安卓app 体验如何
Qt 是一款跨平台的 C++ 应用程序开发框架,支持多种操作系统,包括 Windows、MacOS、Linux 和 Android 等。Qt 提供了丰富的 GUI 库和工具,可以帮助开发者轻松地构建跨平台的应用程序。使用 Qt 开发安卓应用程序,可以提高开
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1