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


相关知识:
安卓 用什么开发
安卓开发主要是使用Java和Kotlin两种编程语言,同时还需要掌握安卓系统的开发框架和一些常用的工具和技术。首先,了解一下安卓开发的一些基本概念和原理:1. 安卓系统架构安卓系统分为四层架构:Linux内核层、跨平台支持库层、安卓运行库层以及应用框架层。
2023-05-23
txt阅读器安卓开发
随着数字化阅读的兴起,越来越多的人开始使用电子书来阅读,但是传统的电子书格式如ePub、mobi等,都需要特定的软件才能打开。而txt格式的电子书则无需任何额外的软件支持,因此使用方便,备受欢迎。在此介绍一下如何开发一款txt阅读器的安卓应用程序。一、思路
2023-05-23
swift能开发安卓手机
Swift 是由苹果公司推出的一种面向对象的编程语言,被用于开发 iOS、OS X、watchOS 和 tvOS 应用。尽管它是苹果公司的专利,但是在编程领域,无一不是开放的,所以Swift其实也可以用于安卓手机的开发。在 Swift 出现之前,iOS 应
2023-05-23
iphone注册了开发者账号还能用吗安卓
当您在苹果开发者平台上注册并且成功开通了开发者账号后,这个账号可以实现在iOS平台上的应用程序开发和发布,但是对于安卓平台上的应用程序开发,该账号是无法直接使用的。原因在于,iOS和安卓是两个不同的操作系统,两者的应用程序开发和发布方式也各自独立并且分别依
2023-05-23
deepin 安卓开发
Deepin作为国内知名的Linux发行版,在近年来越来越受到广大用户的追捧。它的问题有些,但它的优势也得到了很好的展现。Deepin在易用性上做得非常出色,而且它的美观程度也是一流的。这让它成为一款非常适合开发的系统。如果你是一个安卓开发者,你可能会想在
2023-05-23
afinal安卓快速开发框架
Afinal是安卓快速开发框架的一种,它是一个非常优秀的快速开发框架,为安卓开发提供了一系列优秀的工具和方法。Afinal框架的主要目的是帮助安卓开发人员快速构建高效稳定的应用程序。下面对Afinal框架进行详细的介绍。一、Afinal的特点1、可快速开发
2023-05-23
虎爪速派安卓版网络app开发
虎爪速派安卓版是一款相对轻量、简单易用的网络app开发框架,主要用于快速开发安卓应用程序。它的基本原理是将前端UI界面和后端的逻辑代码分离开来,允许开发人员分别聚焦于两者,提高开发效率。虎爪速派安卓版的特点在于其采用了一些流行的技术,例如MVP(Model
2023-04-28
安卓app开发论坛
安卓APP开发是指使用专业的编程工具,编写能够在Android设备上运行应用程序的过程。在安卓APP开发的过程中,开发者需要学习使用主要的开发工具、框架,以及熟悉Android系统的各方面特性,包括用户界面、功能逻辑实现等。下面的文章将详细介绍安卓APP开
2023-04-28
安卓app开发工具套装
Android应用开发的工具套装主要使用的是Android Studio,这是一个由Google开发的官方集成开发环境(IDE)。在开发环境安装后,你将可以使用以下这些工具来进行安卓应用开发。1. Android Studio:Android Studio
2023-04-28
安卓app开发公司报价
安卓应用开发公司的报价取决于多个因素,其中包括以下几个要素:1. 应用类型:针对不同类型的应用,在开发方面所需的人力资源和时间成本将有显著不同。例如,简单的社交媒体应用程序可能只需要几个月的时间来完成,而复杂的企业应用程序可能需要更长时间的开发和测试。2.
2023-04-28
上海苹果安卓app开发
苹果和安卓是两个不同的操作系统平台,因此苹果和安卓App的开发技术也是不一样的。苹果App开发:苹果App开发主要使用Objective-C和Swift两种语言进行开发。在开发过程中,需要使用Xcode IDE,同时还需要使用苹果发布的SDK(Softwa
2023-04-28
net能开发安卓app吗
当然可以!.NET 是一个非常广泛的开发框架,支持多种编程语言(如 C#、VB.NET 等),可以用于开发各种类型的应用程序,包括桌面应用、Web 应用、移动应用等。对于 Android 应用的开发,我们可以使用 .NET 的一个平台:Xamarin。Xa
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1