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


相关知识:
安卓aide开发教程
AIDE 是一款针对 Android 平台的集成开发环境(IDE),它为开发人员提供了类似于 Eclipse 等桌面 IDE 的开发体验。AIDE 支持多种编程语言,例如 Java、C++、Python 等,使开发者在 Android 平台上轻松完成应用程
2023-05-23
unity开发安卓和ios
Unity 是一款非常强大的跨平台游戏引擎,可以用于开发各种主流平台的游戏,包括移动平台。在移动游戏的开发中,最常见的就是安卓和 iOS 两个平台了。那么,Unity 如何开发安卓和 iOS 平台的游戏呢?一、Android 平台Unity 开发 Andr
2023-05-23
uniapp开发安卓有缺点吗
Uniapp是一个基于Vue.js框架的跨平台开发框架,可以同时开发出具备安卓和iOS系统适配的应用软件。使用Uniapp开发安卓应用虽然具有跨平台的优势,但也存在缺点,下面将从原理和详细介绍两个方面阐述。一、原理Uniapp的原理是通过H5技术将应用框架
2023-05-23
h5安卓ios开发
H5开发是指网页开发,它的原理是通过HTML、CSS和JavaScript等技术开发出网站的页面。在移动端领域,H5开发主要用于开发手机网站和APP中的嵌入式网页。H5开发有很多的优势,比如能够快速发布、易于维护和更新、成本低等。下面分别介绍H5在安卓和i
2023-05-23
eclipse开发安卓app的参考文献
Eclipse是一款非常受欢迎的集成式开发环境,它支持Java、C/C++、PHP等多种编程语言,也支持安卓开发。本文将主要介绍如何使用Eclipse开发安卓应用程序,以及如何使用ADT插件进行安卓开发。一、Eclipse开发安卓应用程序的准备工作1. 安
2023-05-23
2019年顺丰安卓开发选择题
顺丰快递是中国最著名的国际和国内快递品牌之一,人们可以通过各种渠道使用顺丰服务。在这些服务渠道之一,就是顺丰官方的安卓应用程序。作为安卓应用程序的开发者,顺丰需要考虑许多因素,确保这个应用程序符合公司的期望标准,同时也要确保它能够为用户提供最佳的使用体验。
2023-05-23
长沙安卓app开发需要多少钱
针对长沙安卓APP开发的价格,会因为开发的需求和工作量的不同而有所不同,一般根据功能和设计难度来进行计价。通常情况下,一个简单的APP开发项目,价格可能在1万元到3万元之间,但是如果开发者需要在APP中使用更复杂的技术和功能,比如说高级数据处理、定制UI设
2023-04-28
苏州安卓app开发多少钱
安卓App开发的价格因项目复杂程度、开发难度和服务要求的不同而不同。一般来说,安卓App开发的价格包含项目策划、UI设计、编程开发、测试验收等多个阶段。这些阶段的工作量和材料费用都要算进整个开发项目的总价中。以下是一些安卓App开发的价格参考:1.基础型A
2023-04-28
安卓新闻类app开发
安卓新闻类app是一种信息聚合类的移动应用程序,它可以提供各种新闻内容,包括时事新闻、科技新闻、财经新闻以及娱乐新闻等。其主要功能包括浏览新闻、分享新闻、搜索新闻、设置新闻分类等。下面是安卓新闻类app的开发介绍。1.需求分析在开发安卓新闻类app前,首先
2023-04-28
安卓开发记单词app
开发一款记单词app需要考虑以下几个方面:1.用户界面设计。在app的设计中,用户体验是非常重要的一环。通常来说,记单词app会让用户输入自己需要背诵的单词,然后通过示例句子、图片等方式给用户进行展示,便于用户理解和记忆。同时还需要提供一个数据记录的页面,
2023-04-28
python如何打包为安卓app
打包Python程序为Android应用的主要方法有两种:- 使用Python-to-Android框架进行打包- 使用Kivy框架进行应用开发和打包下面分别进行详细介绍。使用Python-to-Android框架进行打包Python-to-Android
2023-04-28
java怎么开发安卓app
在本教程中,我们将介绍使用Java语言开发Android应用程序的基本概念和原理。Java是Android开发中较为常用的编程语言,而Android Studio作为官方推荐的集成开发环境(IDE),为开发者提供了编写、编译、调试和发布应用的便捷工具。以下
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1