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


相关知识:
安顺开发区卓格丽鞋店
安顺开发区卓格丽鞋店是一家专门销售女性鞋类产品的实体店铺。店铺地址位于贵州省安顺市西秀区双堡路266号,占地面积较大,拥有上千种不同类型的女性鞋类产品。卓格丽鞋店是一家集生产、批发和零售于一体的品牌鞋店。它的产品主要以女鞋为主,品类齐全,产品质量好,价格实
2023-05-23
阿里巴巴安卓开发插件
阿里巴巴安卓开发插件是一款帮助开发者快速构建安卓应用程序的插件软件。它可以让开发者通过简单的拖拽、设计和配置,快速构建应用程序。该插件基于一种叫作“可视化编程”的开发方式。所谓可视化编程,就是不需要编写代码,而是通过拖拽组件、设置属性、连接组件之间的逻辑,
2023-05-23
sl4a开发安卓app
SL4A (Scripting Layer for Android),是一个能够让开发人员通过Python、Perl、Ruby等脚本语言来编写Android应用程序的框架。同时,SL4A还提供了访问手机底层硬件的API,这为应用程序的开发带来了许多便利。本
2023-05-23
kotlin开发安卓软件
Kotlin是一种新兴的编程语言,它具有简洁,安全,面向对象等优点,越来越多的Android开发者正在使用Kotlin来开发Android应用。在本文中,我们将探讨Kotlin在安卓软件开发中的原理和详细介绍。一、Kotlin概述Kotlin是一种静态类型
2023-05-23
安卓电视app 单独开发软件
开发安卓电视 app 的原理和流程与开发一般的安卓移动端 app 有些不同,因为电视的屏幕和用户使用方式与手机有很大不同。下面是开发安卓电视 app 的一些基本原理和详细介绍:1. 设计 UI 界面:用户使用电视操作需要更加明确和直观的操作方式,因此,UI
2023-04-28
安卓智能家居app开发
智能家居正在成为一种趋势,这种趋势正被大量消费者所关注。安卓智能家居app的开发是实现智能家居系统的关键所在。下面是安卓智能家居app的基本原理和详细介绍。智能家居app一般分为两种,一种是控制类应用,另一种是学习类应用。控制类应用一般是通过访问云端服务器
2023-04-28
安卓底层开发需要学app吗
安卓底层开发与APP的开发是两个不同的领域,但是了解APP的开发原理可以帮助你更好地理解安卓系统的底层开发。APP开发主要集中在UI设计和应用逻辑上,涉及到的开发工具包括Android Studio等。开发一个APP需要掌握Java语言和Android S
2023-04-28
安卓app开发讯息
安卓App开发讯息:原理与详细介绍一、安卓App开发概述安卓(Android)是一种基于Linux的自由及开放源代码的操作系统,主要用于触控屏幕的移动设备如智能手机和平板电脑等。安卓App开发是指使用安卓操作系统作为应用程序运行环境的软件开发过程,目的是为
2023-04-28
dart开发安卓app
Dart是一种由谷歌公司开发的面向对象编程语言,它可以跨平台使用,支持开发安卓、iOS、Web、桌面等应用程序。而在安卓开发中,Dart一般用于开发Flutter应用程序。Flutter是Google在2017年推出的UI开发框架,它基于Dart语言开发,
2023-04-28
app制作安卓版下载
要制作安卓应用程序,通常需要掌握以下技能和工具:1. Java编程语言: Java是安卓应用开发的主要编程语言,因此需要掌握Java编程语言。2. 安卓软件开发工具包(ADT):ADT是Google为安卓开发者推出的一套软件开发工具包,它包括安卓开发工具、
2023-04-28
app安卓开发和ios开发
移动应用开发主要分为Android和iOS两个平台。Android是Google的移动操作系统,而iOS则是苹果公司的移动操作系统。下面将对这两个平台的开发原理和详细介绍进行阐述。一、Android应用开发1. Android应用开发原理Android应用
2023-04-28
APP开发好上线运营需要注意的事项有那些?
我们经常遇到某位老总或客户信誓旦旦的找到我们开发一款APP,在开发阶段各种的需求,各种的抓细节,赶进度,无数次的电话沟通,无数次的需求对接,终于到了APP交货时刻,但是交接之后,进入运营之后,我们缺很少再被“骚扰”。直到一段时间之后,我们做售后回访,才发现对方根本就没有怎么运营,完全是一种放任的状态。这导致我们经常说的,APP开发完成之时,就是这个项目挂掉的时刻!
2023-02-10
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1