Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

464
Visualizações
Android, cómo escanear y filtrar correctamente los UUID de ble

Estoy trabajando con BluetoothLe en Android (API mínima: 21+). Actualmente, el procedimiento de filtrado del uuid del servicio funciona, pero no del todo como se esperaba. A continuación se muestra un segmento de código utilizado para configurar los parámetros básicos del escáner, esto es lo que funciona actualmente. Según áreas de otros trabajos con Ble (iOS, hardware integrado), se hace evidente que existen capacidades para filtrar dispositivos Ble según sus asignaciones de UUID de 16 bits únicamente. Lo que me lleva a Android... Me di cuenta de que Android ha tenido un comienzo bastante difícil con Ble y su ecosistema de dispositivos bastante segmentado, pero no veo cómo/por qué Android no puede seguir caminos similares con los UUID como otras plataformas. Como todos los UUID que provienen de Bluetooth SIG son identificadores de 16 bits solo con una mera definición de UUID_BASE (00000000-0000-1000-8000-00805F9B34FB).

 ... // devices UUID service ParcelUuid parcelUuid = new ParcelUuid(UUID.fromString("1F0E0D0C-0B0A-0909-0807-060504030201")); // devices UUID service mask ParcelUuid parcelUuidMask = new ParcelUuid(UUID.fromString("00000D0C-0000-0000-0000-000000000000")); // Filters and Settings scanFilter = new ScanFilter.Builder().setServiceUuid(parcelUuid, parcelUuidMask).build(); scanFilterList.add(scanFilter); scanSettings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_POWER).build(); // Scanning Started mBluetoothLeScanner.startScan(scanFilterList, scanSettings, scanCallback); ...

Con todo lo mencionado anteriormente, tengo dos dispositivos de hardware integrado que transmiten dos de sus propios servicios UUID que son muy similares entre sí pero no menos diferentes. A continuación se muestran esos UUID, en todas las cuentas solo el MSB (Byte más significativo) es el diferenciador entre todos ellos. También hay nombres de dispositivos diferentes.

 Device One: Service 1 - 1F0E0D0C-0B0A-0909-0807-060504030201 Service 2 - 2F0E0D0C-0B0A-0909-0807-060504030201 Device Two: Service 1 - EF0E0D0C-0B0A-0909-0807-060504030201 Service 2 - FF0E0D0C-0B0A-0909-0807-060504030201 Common Identifier amongst the UUID's: 0x0D0C

Del segmento de código proporcionado anteriormente, el ParcelUuid que se usa en el método setServiceUuid parece requerir una coincidencia exacta para que el escáner incluso devuelva un dispositivo, a pesar de la máscara de coincidencia necesaria. Entonces, ¿cómo hace la solicitud a los controladores/hardware para filtrar solo por identificadores de 16 bits en lugar de los identificadores completos de 128 bits? Porque el modelo que he presentado arriba con los dos dispositivos diferentes, cada uno con su propio Servicio UUID diferente del otro, no es capaz de escanear y devolver todos los dispositivos deseados o esperados.

Siento que el problema que tengo es doble, pero debe abordarse, porque parece que no puedo encontrar la respuesta en ninguna parte. He buscado alto y bajo para todas las publicaciones del foro, apilé preguntas/respuestas que tocan este tema, pero ninguna de ellas parece aparecer como lo que estoy buscando. No estoy seguro de si mi comprensión del filtrado en Android es defectuosa, si a Android le faltan funciones o si no puedo encontrar dichas funciones en las clases proporcionadas de Android. Tengo algunas ideas sobre cómo lograr esta "característica" en el software, pero será bastante feo, consumirá mucho tiempo y gastará mucha batería. Un ejemplo de ello es escanear abiertamente y filtrarlo manualmente. Pero creo que hay o debería haber una función para admitir el filtrado UUID de 128 bits Y 16 bits al escanear a través de dispositivos.

Alguien puede ayudar a arrojar luz sobre esto????

Además, disculpas por la longitud de esta pregunta publicada...

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

La máscara i debe ser opuesta: use 1 para incluir bits y 0 para aquellos que deben ignorarse.

 filter: 1F0E0D0C-0B0A-0909-0807-060504030201 mask: 0000FFFF-0000-0000-0000-000000000000

El resultado es que se incluye cualquier dispositivo que tenga '0D0C'. Probablemente desee un filtro "más estricto" con más similitudes que este.

over 4 years ago · Santiago Trujillo Relatório

0

No estoy seguro exactamente sobre qué desea filtrar, pero si simplemente desea aplicar el filtro ????0D0C-????-????-????-??????? ?????, debe tener el paqueteUuid establecido en 00000D0C-0000-0000-0000-000000000000 y el paqueteUuidMask establecido en 0000FFFF-0000-0000-0000-000000000000.

over 4 years ago · Santiago Trujillo Relatório

0

Debe filtrar el BLE en función de las direcciones MAC, filtran a la perfección y, tal vez, si ha encontrado la solución para el filtrado de UUID, compártala.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda