标签:android pairing bluetooth bluetooth-lowenergy
我在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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。