Estoy frustrado por mi exploración BLE regresar sin servicio UUID GATT (es decir, los scanRecord.getServiceUUIDs()
rendimientos null
). Sin embargo, sé que mi periférica de la frecuencia cardíaca y la publicidad está funcionando correctamente porque el servicio de la frecuencia cardíaca se descubrió (y legible) por la aplicación LightBlue). Aquí está mi función en mi ScanCallback
objeto:
override fun onScanResult(callbackType: Int, result: ScanResult?) {
super.onScanResult(callbackType, result)
// This log shows that result.mServiceUuids is null
Log.i(TAG, "BLEDeviceManager.ScanCallback.onScanResult: ${result.toString()}")
// TODO: handle null ScanResult
val parcelUuids = if (result.getScanRecord() != null) result.getScanRecord()!!.getServiceUuids() else null
if (parcelUuids == null) {
Log.i(TAG, "parcelUUids was null for scanRecord = ${result.getScanRecord()!!.toString()}")
return
}
val serviceList = ArrayList<UUID>()
for (i in parcelUuids.indices) {
val serviceUUID = parcelUuids.get(i).getUuid()
if (!serviceList.contains(serviceUUID))
serviceList.add(serviceUUID)
}
Log.i(TAG, "Here is a list of the service UUIDs: $serviceList")
}
Aquí está el registro de:
I / BLEDeviceManager: parcelUUids era nulo para scanRecord = ScanRecord [mAdvertiseFlags = 6, mServiceUuids = null, mServiceSolicitationUuids = null, mManufacturerSpecificData = {}, mServiceData = {}, mTxPowerLevel = 3, mDeviceName = blehr_sensor_1.0]
¿Qué estoy haciendo mal, por ejemplo que el mServiceUuids
siempre es nulo?
De acuerdo con la ScanRecord que la producción, el dispositivo no es la publicidad de cualquier servicio UUID. Eso no significa que no tiene ese servicio .... simplemente no se anuncian.
Es posible que desee conectarse a él y luego llamar discoverServices () para obtener la lista de servicios que realmente ha ...