
我在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上的BLE外设配对引脚全部内容,希望文章能够帮你解决Android上的BLE外设配对引脚所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)