Pino de emparelhamento periférico BLE no android
Eu implementei um servidor GATT e um aplicativo cliente no Android. A conexão está funcionando e forcei o emparelhamento adicionando PERMISSION_READ / WRITE_ENCRYPTED_MITM a todas as GattCharacteristics.
Mas o comportamento de emparelhamento difere em diferentes clientes:
1) O pino é mostrado no cliente / central (Android 5 no Samsung Galaxy S3) e deve ser inserido no servidor / periférico (Android 7 no Nexus 5).
2) A senha é exibida nos dispositivos cliente / central (Android 5 no Samsung Galaxy S3) e servidor / periférico (Android 6 no Nexus 7)
3) O emparelhamento com Windows ou iOS falha com o servidor / periférico expecando um pino para entrada.
O que eu esperava e quero que aconteça é:
O pino é mostrado no servidor / periférico e deve ser inserido no cliente / central
Existe alguma maneira de configurar esse comportamento?
Desde já, obrigado!
EDITAR
Aqui está a minha configuração:
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);