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


相关知识:
v5开发版基于安卓哪个版本开发
v5开发版是基于安卓9.0版本(也就是Android Pie)进行开发的。这意味着v5开发版中包含有许多与安卓9.0相关的特性和用法。安卓9.0版本是Android平台上一个重要的版本,由Google公司于2018年8月发布。这个版本引入了许多新的特性和调
2023-05-23
qt5开发安卓应用
Qt是一个跨平台的C++应用程序开发框架,可以用于开发Windows、Linux、MacOS以及安卓等操作系统的应用程序。Qt提供了许多方便的API,并且能够针对不同的平台进行优化,在安卓平台上可以实现快速高效的开发。下面将介绍如何使用Qt5开发安卓应用。
2023-05-23
html5 安卓开发
HTML5是一种新的Web语言,它的出现为移动应用程序开发带来了很大的改变。在HTML5的支持下,移动设备上的应用程序可以使用Web技术来编写,使得跨平台开发变得更加简单和便捷。在特定平台上开发应用程序的成本也因此而降低。那么,HTML5在Android开
2023-05-23
android学习教程安卓插件化开发
安卓插件化开发是安卓开发中比较高级的一种技术,它将应用拆分为多个模块,使得不同的模块可以独立开发,方便管理。本文将介绍插件化开发的原理和详细实现方法。一、插件化开发原理插件化开发的基本原理是,将应用设计为主程序与插件程序两部分,其中主程序负责提供基础功能和
2023-05-23
安卓视频app开发
安卓视频app开发需要掌握下列知识:1.安卓基础知识2.多媒体技术3.网络通信4.第三方SDK应用下面分为三步简单介绍安卓视频app开发原理:## 步骤1:准备工作在开始开发前,需要准备以下工作:1. 安装JDK和Android Studio(或Eclip
2023-04-28
安卓系统app定制开发要多少钱
安卓系统App定制开发费用因素非常多,包括开发的复杂度、定制的功能、开发者的经验以及地区等。在这里,我将为你提供一个关于安卓系统App定制开发的原理和详细介绍,以帮助你更好地了解费用构成。1. 项目需求分析与评估在开始安卓系统App定制开发之前,首先需要对
2023-04-28
安卓短视频app制作开发
安卓短视频App制作开发教程随着互联网技术的发展,短视频已经成为了人们日常生活中的重要组成部分。很多人想要开发属于自己的短视频App,那么如何制作一个安卓短视频App呢?本篇文章将为您详细介绍制作安卓短视频App的流程和关键技术点。一、技术栈和工具选择1.
2023-04-28
安卓app开发平台有哪些
Android平台是一个开源的移动操作系统,目前智能手机市场中占有非常大的份额。因此,许多软件开发者希望开发安卓App。开发安卓App需要使用一些开发平台和工具,下面是一些常用的安卓App开发平台:1. Android StudioAndroid Stud
2023-04-28
安卓app开发实战连接蓝牙
连接蓝牙是安卓app开发中常见的功能之一。下面就给出一些连接蓝牙的原理和详细介绍。连接蓝牙的原理:蓝牙连接可以分为两种模式:客户端模式和服务端模式。在客户端模式下,手机作为客户端,主动连接蓝牙设备。首先,在手机上搜索蓝牙设备,然后建立与设备的Socket连
2023-04-28
安卓app开发前端用到什么技术
安卓App开发前端技术主要包括以下几个方面:1. Java/Kotlin语言 —— 安卓App开发离不开Java或Kotlin语言,它们是安卓App开发的主力语言。Java是一种面向对象的编程语言,而Kotlin是一种现代化的、面向对象的编程语言,它在An
2023-04-28
初学者安卓简易天气app开发
在这篇文章中,我们将学习如何开发一个简易的安卓天气应用程序,非常适合初学者在入门阶段使用。我们将使用 Android Studio 开发工具,以及 OpenWeatherMap 免费天气 API 来获取实时天气信息。1. 安装 Android Studio
2023-04-28
c语言可以开发安卓app吗
虽然C语言本身是可以用来开发安卓应用程序的,但是在实际开发中,由于Android系统的特点和限制,C语言仅能作为一种底层语言被使用。因此,如果想要在Android平台上开发应用程序,需要在C语言的基础上,结合Java等其他编程语言来进行编码工作。其中,C语
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1