Android上的BLE外设配对引脚

时间:2017-03-08 16:49:32

标签: android bluetooth bluetooth-lowenergy pairing

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

但不同客户的配对行为有所不同:

1)Pin显示在客户端/中央(Samsung Galaxy S3上的Android 5)上,应插入服务器/外围设备(Nexus 5上的Android 7)。

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

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

我期望和想要发生的是:

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

有没有办法配置这种行为?

提前致谢!

修改

这是我的设置:

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);

1 个答案:

答案 0 :(得分:3)

摘要:将客户端的I / O功能设置为"仅限键盘"。

说明:

我不完全确定会发生什么事情"引擎盖下#34;你的系统。但是根据BLE CoreSpec,我可以告诉你应该发生什么。首先看CoreSpec V4.2,Vol。 3,H部分,第二章。 2.3.5.1,表2.7& 2.8。在那里定义了使用哪种配对,具体取决于认证要求和设备的I / O功能。

您想要的是"密钥输入:响应者显示,发起人输入"。如果使用传统配对(根据蓝牙V4.0配对),并且如果:

,则会出现这种情况
  • 服务器(响应者)有一个显示AND
  • 客户端(发起人)有一个键盘AND
  • 服务器和客户端都没有显示和键盘。

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

所以你看到的是对应不同服务器的不同I / O功能。您的客户端似乎有显示器和键盘,因此如果您使用带显示器和键盘的服务器,客户端将显示密钥,响应者将等待输入(适合您的情况1)。对于案例2,我们有数字比较;只有当客户端和服务器都支持LE Secure Connections(根据蓝牙V4.2进行配对)时,才能实现此目的。

对于案例3,我不知道发生了什么,但是Android系统和iOS系统之间可能存在一个问题,但它们并不能很好地运行(但我不知道为什么)。

由于配对似乎在这里完全自动化,因此改变事物的唯一可能性是改变I / O功能。应该有一个功能来改变这些功能,检查你的手册。如果您不想在客户端上使用显示器,请将其I / O功能设置为"仅限键盘"它会表现出你期望的行为。(*)

(*)仅在您使用传统配对时才有效。如果两个设备都支持LE Secure Connections,则建议您使用此新配对协议,因为它消除了旧协议的安全问题。 (但我会假设在这种情况下,无论如何都会自动使用较新的协议。)