其他分享
首页 > 其他分享> > Android上的BLE外设配对引脚

Android上的BLE外设配对引脚

作者:互联网

我在Android上实现了GATT服务器和客户端应用程序.连接正常,我通过将PERMISSION_READ / WRITE_ENCRYPTED_MITM添加到所有GattCharacteristics中来强制配对.

但是配对行为在不同的客户端上有所不同:

1)针脚显示在客户端/中央(三星Galaxy S3上为Android 5),应插入服务器/外围设备(Nexus 5上为Android 7).

2)密码同时显示在客户端/中央设备(三星Galaxy S3上的Android 5)和服务器/外围设备(Nexus 7上的Android 6)上

3)与Windows或iOS配对失败,因为服务器/外围设备需要输入引脚.

我期望并且想要发生的是:

引脚显示在服务器/外围设备上,并且必须插入客户端/中央设备上

有什么方法可以配置该行为?

提前致谢!

编辑

这是我的设置:

BluetoothGattService gattService = new BluetoothGattService(
    serviceUUID, BluetoothGattService.SERVICE_TYPE_PRIMARY);
gattService.addCharacteristic(new BluetoothGattCharacteristic(
    charReadUUID,
    BluetoothGattCharacteristic.PROPERTY_READ,
    BluetoothGattCharacteristic.PERMISSION_READ_ENCRYPTED_MITM
));
gattService.addCharacteristic(new BluetoothGattCharacteristic(
    charWriteUUID,
    BluetoothGattCharacteristic.PROPERTY_WRITE,
    BluetoothGattCharacteristic.PERMISSION_WRITE_ENCRYPTED_MITM
));
gattServer.addService(gattService);

...

AdvertiseSettings settings = new AdvertiseSettings.Builder()
    .setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_BALANCED)
    .setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH)
    .setConnectable(true)
    .build();

AdvertiseData data = new AdvertiseData.Builder()
    .setIncludeTxPowerLevel(false)
    .addServiceUuid(serviceUUID)
    .build();

BluetoothLeAdvertiser advertiser = adaper.getBluetoothLeAdvertiser()
advertiser.startAdvertising(settings, data, callback);

解决方法:

摘要:将客户端的I / O功能设置为“仅键盘”.

说明:

我不太确定系统“幕后”会发生什么.但是我可以告诉您根据BLE CoreSpec应该发生什么.首先请参阅CoreSpec V4.2,第1卷.第三部分,H章. 2.3.5.1,表2.7& 2.8.在此定义了使用哪种配对,具体取决于身份验证要求和设备的I / O功能.

所需的内容描述为“密码输入:响应者显示,发起者输入”.如果使用旧式配对(根据Bluetooth V4.0配对),并且如果:

>服务器(响应者)具有显示屏AND
>客户端(发起方)具有键盘AND
>服务器和客户端都没有显示器和键盘.

(并且,如果未使用OOB数据并且强制执行了MITM,但我假设这样做是给定的.)请注意,如果客户端和服务器都具有显示器和键盘,则默认情况是客户端显示并由服务器输入.看来,如果您的协议自动处理配对,它也会自动选择CoreSpec中定义的配对方法.

因此,您所看到的对应于不同服务器的不同I / O功能.看来您的客户端具有显示器和键盘,因此,如果您使用带有显示器和键盘的服务器,客户端将显示密码,响应者将等待输入(适合您的情况1).对于案例2,我们有数值比较;仅当客户端和服务器都支持LE安全连接(根据Bluetooth V4.2配对)时,才有可能.

对于情况3,我不知道发生了什么,但这可能是Android系统和iOS系统不能很好地协同运行的问题(但我不知道为什么).

由于配对似乎在此处已完全自动化,因此更改内容的唯一可能性是更改I / O功能.应该有一个更改这些功能的功能,请查阅手册.如果您不想在客户端上使用显示器,请将其I / O功能设置为“仅键盘”,它将显示您期望的行为.(*)

(*)仅在使用旧式配对时成立.如果两个设备均支持LE安全连接,则建议您使用此较新的配对协议,因为它消除了旧协议的安全性问题. (不过,我认为在这种情况下,无论如何都会自动使用较新的协议.)

标签:android,pairing,bluetooth,bluetooth-lowenergy
来源: https://codeday.me/bug/20191012/1901530.html