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


相关知识:
安卓adt开发
ADT(Android Development Tools)是Google官方提供的开发Android应用程序的集成开发环境(IDE)。该环境基于Eclipse,并与Eclipse的Java工具集相似。ADT的每个版本均与Android平台版本匹配,以便为
2023-05-23
安卓10开发者模式怎么设置更流畅
Android开发者模式是Google为Android系统开发者提供的一个调试工具,它包含了许多高级设置,可以帮助开发人员更好地调试和优化代码,从而使应用程序更加流畅、稳定。本文将介绍如何设置开发者模式以提高Android设备的性能和流畅度。一、开启And
2023-05-23
安卓10开发工具
安卓10作为一款全新的操作系统,为开发者带来了很多新的特性和功能,因此在开发安卓10应用时需要使用一些相关的开发工具。本文将对安卓10开发工具做详细介绍。1. Android StudioAndroid Studio是Google在2013年推出的一款针对
2023-05-23
vbnet开发安卓
VB.NET是一种通用的、面向对象的编程语言,它可以在.NET框架上运行,因此适用于Windows操作系统。虽然VB.NET主要被认为是Windows上的技术,但是实际上它也提供了一种跨越多个平台的解决方案,包括安卓。下面,我将介绍一些关于使用VB.NET
2023-05-23
miui7开发版安卓6
MIUI是小米公司推出的基于Android系统的自主ROM,MIUI7则是MIUI的第七版,在MIUI7中,小米公司首次采用了Android 6.0操作系统,并且对MIUI7开发版进行了一系列优化和改善,下面就来详细介绍MIUI7开发版安卓6.0。一、MI
2023-05-23
hbuilder开发安卓app怎么样
HBuilder是一款多合一开发平台,包含了HTML、CSS、JavaScript、Cordova、Vue.js等多项技术,是专门为移动应用开发而设计的软件。它通过类似Web开发的方式,可以为安卓、iOS以及H5平台快速地开发应用程序,降低了开发难度和门槛
2023-05-23
安卓开发app步骤
安卓开发App的步骤主要包括以下几个方面:1. 需求分析在开始开发App之前,需要梳理清楚开发的需求及功能点,并进行详细的分析和说明。可以从用户角度出发,了解用户的需求,以及竞争对手的情况等。2. 界面设计界面设计是App开发的重要一步,需要对App的UI
2023-04-28
安卓app开发和前端
安卓App开发和前端是两个不同的领域,安卓App开发主要是针对Android平台开发应用程序,前端则是指网页或应用程序的前台可视化部分。1.安卓App开发安卓App开发需要掌握Java编程语言和Android开发框架。以下是一些安卓App开发的基础知识:-
2023-04-28
安卓 app开发框架
在本教程中,我们将学习如何在Android平台上使用流行的开发框架。开发框架简化了应用程序开发过程,允许开发者更快地构建出更加可靠的应用程序。本教程将涵盖以下框架的基本原理和详细介绍:1. React Native2. Flutter3. Android
2023-04-28
南京安卓app开发收费多少
由于南京安卓app开发的收费标准是根据项目的复杂程度和工作量来定价的,因此很难给出一个固定的价格范围。以下是一些可能会影响南京安卓app开发收费的因素:1. 功能和复杂程度:app的功能越多,开发难度就越大,因此价格也就更高。例如,一个单纯的信息展示app
2023-04-28
python如何制作安卓app
制作安卓APP的一种方法是用Python语言进行开发。Python语言有着操作简单、代码清晰易读等特点,因此使用Python来制作安卓APP可以简化开发难度,提高开发效率。下面是使用Python开发安卓APP的基本步骤:1. 安装所需的工具和库:开发安卓A
2023-04-28
php开发原生安卓app
在本教程中,我们将探讨使用PHP开发原生Android应用的技巧和方法。PHP被广泛用于web开发,但对于移动应用开发,我们需要实现桥接技术来运行PHP代码。要实现这一目标,我们将使用WebView和PHP的Android应用程序开发服务器。请注意,使用P
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1