Estoy trabajando en el desarrollo de una aplicación para comunicarse con un periférico Bluetooth LE. El periférico con el que estoy probando en este momento es uno de these. Lo interesante es que, a veces, cuando lo descubro obtengo su nombre propio, "SimpleBLEPeripheral", a veces obtengo (null)
. No parece haber ningún comando que pueda enviar al CBPeripheral para forzar una actualización de lectura en el nombre, entonces, ¿cómo puedo asegurarme de que realmente obtenga el nombre anunciado del periférico?CBPeripheral nombre es a veces nulo
Respuesta
Si obtiene el nombre de la publicidad NSDICtionary Datada siempre será el nombre que está en el paquete de publicidad enviado por el periférico.
Sin embargo, si lee la propiedad del nombre de un objeto CBPeripheral, ese nombre puede variar. Tratamos de proporcionar el mejor nombre que nos conozca en ese momento. Si aún no nos hemos conectado al periférico, proporcionaremos el nombre del paquete publicitario. Si una conexión con el periférico se ha realizado en el pasado, habremos leído el nombre de GAP. Consideramos que el nombre de GAP es un nombre "mejor" que el que está en el paquete de publicidad (debido a las restricciones de tamaño del paquete publicitario).
Lo único que encontré que soluciona este problema es comenzar a escanear y detener el escaneo, y finalmente todos los dispositivos que espero encontrar en el espacio físico aparecen con nombres no nulos y UUID no nulos.
No pude hacer que esto funcionara. Después de parar y volver a iniciar el escaneo, o incluso detener y volver a iniciar la publicidad, todavía obtengo el nombre GATT ('iPad' porque mi dispositivo es ipad). Solo una vez veo el nombre de peripheral.name = publicised. Pero escuche ESTE misterio: si la clave de nombre de datos de anuncios periféricos tiene un nombre de 28 caracteres, los datos de anuncios centrales están vacíos, porque eso es demasiado largo (con UUID), PERO el nombre PERFIL.UNIVERSAL de ONE central muestra el nombre de 28 caracteres. Esto tiene potencial porque podría empaquetar 28 bytes de datos en los datos de anuncios de periféricos para ahorrar tiempo y batería en lugar de un intercambio de lectura extra para obtener datos. ¿Cómo puedo hacer esto? –
- 1. getView en fragmentos devuelve a veces nulo
- 2. TypeError: a es nulo
- 3. localhost es lento a veces
- 4. ¿IntPtr.Zero es equivalente a nulo?
- 5. AbrirArgs es error nulo
- 6. ¿Es nulo un nombre de propiedad javascript válido?
- 7. Android onActivityResult. La variable miembro a veces es nula
- 8. Firemonkey semitransparente Image3D a veces es opaco
- 9. PHP considera nulo es igual a cero
- 10. C# si es nulo, entonces nulo expresión
- 11. ¿Cambiar el nombre solo por nulo?
- 12. MVC3 ValidationAttribute validationContext.memberName es nulo
- 13. SyndicationItem.Content es nulo
- 14. TypeError es nulo?
- 15. TestContext es nulo
- 16. HttpContext.Current.Session es nulo
- 17. jQuery $ ("# campo") es nulo?
- 18. Creado NSURL es nulo
- 19. HttpContext.Current.Request.UserHostAddress es nulo
- 20. EventHandler es nulo
- 21. Comprobando si es nulo
- 22. isnull vs es nulo
- 23. Subida HttpPostedFile es nulo
- 24. ¿Es nulo un objeto?
- 25. localStorage.prototype es nulo
- 26. si ItemsControl.ItemsSource es nulo
- 27. WebBrowser.Document.Body siempre es nulo
- 28. ¿Por qué el compilador de Java a veces permite el desempaquetado de nulo?
- 29. Pruebas unitarias que a veces fallan, a veces pasan
- 30. prueba si getJSONArray es nulo o no
Parece que funciona, simplemente no sé dónde se define el valor 'kCBAdvDataLocalName' para poder incluirlo. Cuando imprimo los datos del anuncio, esa es la clave que acompaña al nombre, pero no sé cómo recuperarlo sin ese valor constante –
Pude localizar la clave del nombre en la referencia del núcleo del marco bluetooth. Es un const llamado 'CBAdvertisementDataLocalNameKey'. –
¿Pudo leer peripheral.name constantemente? –