iosapp
iOS应用开发详细介绍iOS是Apple的手机操作系统,它为iPhone、iPad和iPod Touch等设备提供支持。作为一名在互联网领域有着丰富知识的网站博主,我将为您介绍iOS应用开发的原理,包括开发流程、编程语言、框架、设计思路等方面的信息。1. 开发环境搭建首先需要安装Xcode,它是Ap...
2023-11-15 围观 : 3次
在 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 的方式创建一个蓝牙从设备,并且如何通过输入密码进行安全连接的方法。在具体开发中,可以根据实际情况改变最后的连接以及断开连接的逻辑。
iOS应用开发详细介绍iOS是Apple的手机操作系统,它为iPhone、iPad和iPod Touch等设备提供支持。作为一名在互联网领域有着丰富知识的网站博主,我将为您介绍iOS应用开发的原理,包括开发流程、编程语言、框架、设计思路等方面的信息。1. 开发环境搭建首先需要安装Xcode,它是Ap...
AOT,也就是Ahead-of-Time,是一种方法,用于在不执行代码的情况下将代码编译为本地机器代码。在Android开发中,AOT最常用于编译Java到本地机器代码,以在Android设备上提高应用程序的性能。AOT编译发生在应用程序的构建时期。它的工作方式是将字节码编译为本地机器码。编译过程会...
将网页做成App,主要是通过将网页内容封装到一个本地的应用程序中,然后在本地运行。下面详细介绍一下实现的原理:1. 原理将网页封装成本地应用程序主要有两种方式:Native App和Hybrid App。Native App 是指完全采用本地开发技术,利用系统底层 API 开发的应用程序,由操作系统...
WordPress是一款非常流行的内容管理系统,可以用于创建博客、新闻网站、电子商务网站等。随着移动设备的普及,越来越多的人开始使用移动设备访问网站。为了让用户更方便地访问网站,可以将WordPress网站转换为移动应用程序。本文将介绍如何将WordPress网站转换为移动应用程序。一、移动应用程序...
Haxe是一种跨平台的开源编程语言,可以用于开发各种类型的应用程序,包括安卓应用程序。本文将介绍如何使用Haxe开发安卓应用程序。 1. 安装Haxe首先,要在本地计算机上安装Haxe编译器。可以在Haxe官方网站上下载最新版本的Haxe安装包,并按照提示进行安装。 2. Android SDK使用...