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


相关知识:
安卓12哪里找开发者选项
Android系统是一种非常受欢迎的移动操作系统,不仅在手机和平板电脑上广泛使用,而且越来越多的设备也开始使用它,例如电视、智能音箱和智能手表等。一般情况下,用户不能够直接访问Android系统的高级设置,但是通过打开开发者选项,用户可以获得额外的设置选项
2023-05-23
vb6开发安卓app
首先要明确的是,VB6并不支持直接开发安卓app,因为VB6编译出来的是Windows平台应用。但是,我们仍然可以通过一些方法让VB6开发出来的应用在安卓设备上运行。其中一种方法就是使用第三方的工具将VB6应用转换成安卓应用。其中比较常用的工具有B4A(B
2023-05-23
ue4安卓开发
UE4是一款强大的游戏引擎,它支持多平台开发,其中包括移动平台。UE4的移动平台开发特别适合于在iOS和Android等移动设备上进行开发。本篇文章主要介绍UE4在Android平台上的开发原理和详细步骤。一、UE4在Android平台上的开发优势UE4在
2023-05-23
oppo安卓10在哪里找开发者选项
在Android系统中,开发者选项是一个隐藏的设置菜单,它为开发者提供了一系列高级功能和选项来进行调试和优化Android设备。如果你是一名Android开发者或者对Android系统有深入了解的用户,那么开发者选项对你来说就非常有用了。而对于一些新手用户
2023-05-23
js 开发安卓app
JavaScript (JS) 是一种非常流行的编程语言,很多人都想利用这门语言在移动设备上开发应用程序。虽然 JS 通常被认为是 Web 编程的首选语言,但事实上,也可以使用它来编写安卓应用。本文将介绍如何使用 JS 开发安卓应用程序。首先,我们需要了解
2023-05-23
eclipse安卓开发怎样写源码
Eclipse是一款常用的集成开发环境(IDE),用于开发Java应用程序、Web应用程序和安卓应用程序等。在安卓开发中,Eclipse作为一个主流的开发环境,被广泛应用。在Eclipse中,写安卓源码的过程是一个简单而富有挑战的任务。下面,本文将介绍Ec
2023-05-23
开发安卓app有前途吗
开发安卓应用在当今的科技世界中确实是一个有前途的职业。在全球范围内,安卓手机设备的数量众多,市场份额较高,因此安卓应用开发者有着巨大的市场需求。为了充分了解安卓开发的前景,我们首先应该了解安卓开发的基础知识,随后介绍相关的发展趋势和技能需求。1. 安卓系统
2023-04-28
安卓物流app开发有用吗
安卓物流App开发有用吗答案是肯定的,安卓物流App的开发不仅有用,而且随着互联网技术的改进,具有很大的发展潜力。物流App能为广大物流行业参与者带来很多便利,包括货物追踪、订单管理、运输优化等多个方面。下面我们将详细介绍安卓物流App的原理以及应用场景。
2023-04-28
安卓开发必备app
作为安卓开发人员,必备的应用程序具有多种功能,包括 IDE、源码管理工具、测试工具、性能分析工具等等。在下面的段落中,我将简要地介绍其中几个应用程序。1. Android StudioAndroid Studio 是谷歌公司正式推出的一个完整的 Andro
2023-04-28
安卓开发小手册中文版app
安卓开发小手册中文版App是一款针对安卓开发初学者或者有一定经验基础的程序员所准备的学习材料。该App涵盖了Android开发的各个方面,例如基本架构、组件、布局、网络访问和数据库等。它旨在帮助解决开发过程中遇到的困难和问题,同时提供了丰富的实例代码和解决
2023-04-28
天津安卓app开发
Android是一种在移动设备上运行的操作系统,它是由谷歌开发的。该平台的核心是由Linux内核形成的。Android应用程序可以用Java编写,开发者可以使用Android软件开发工具包(SDK)来开发这些应用程序。安卓app开发的基本构成如下:1. A
2023-04-28
印度开发者app下载安卓
标题:印度开发者创建的Android应用下载:原理与详细介绍随着科技的快速发展,越来越多的印度开发者开始涌入应用开发市场。借助于开放的Android平台,这些开发者从头到尾开发并发布了许多有趣和实用的应用程序。在本篇文章中,我们将深入挖掘印度开发者创建的A
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1