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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值