ios core-bluetooth bluetooth-lowenergy background-application

ios - Tema de tiempo de fondo para la aplicación Bluetooth LE para Iphone 4s



core-bluetooth bluetooth-lowenergy (1)

Estoy usando el framework core-bluetooth para mi aplicación en Iphone-4s.
Normalmente, esto tiene que ser una aplicación en segundo plano que puede ejecutarse el mayor tiempo posible.

Ahora solo se ejecuta durante 40 min - 1 hora max.

Espero por lo menos 1 día más o menos.

Para esto, el valor "bluetooth-central" se agrega en la clave "Modos de fondo requeridos" en el archivo .plist.

Parece que mi aplicación va a "suspender" el modo, al final. ya que cuando abro la aplicación de nuevo (en segundo plano al estado en primer plano) está enviando la notificación nuevamente, esto significa que la conexión Bluetooth todavía está conectada y el dispositivo BLE sigue enviando la notificación. Si presiono el botón de inicio y la aplicación pasa a segundo plano, NO vuelve a recibir la notificación.

¿Alguien puede decirme por qué mi aplicación vive en modo de fondo solo por un máximo de 1 hora? Debe continuar ejecutándose como una aplicación de música normal en segundo plano para siempre.

¿Apple dice algo específico sobre qué condición tiene una aplicación en segundo plano (que es una de esas aplicaciones de fondo en ejecución continua que cae en las 5 categorías) que falla y que pasará al modo de suspensión?

Haciendo referencia a " iPhoneAppProgrammingGuide ", en la sección " Communicating with a Bluetooth Accessory ", me doy cuenta de que, para una larga ejecución en segundo plano, las implementaciones de la aplicación Bluetooth LE 2 son necesarias:

1) La clave UIBackgroundModes debe ser "bluetooth-central" en el archivo Info.plist . 2) Cualquier aplicación que admita el procesamiento en segundo plano de datos Bluetooth debe estar basada en sesiones.

Así que para mi aplicación, se incorporó la implementación FIRST, y con esa aplicación se puede ejecutar en segundo plano y realizar todas las tareas durante un máximo de 1 hora.

Ahora necesito implementar la segunda implementación. es decir, basado en la sesión. Lo que permitirá obtener los eventos incluso si la aplicación está en estado "suspendido" según la documentación. Intenté encontrar para crear una sesión adecuada específica para Bluetooth LE (Core Bluetooth framework) como el " EASession " presente para Classic Bluetooth (External Accessory framework). Pero no lo encontré.

Básicamente, no estoy seguro de qué clase de sesión necesito usar para el propósito de BLE. Para audio / video, redes e internet, accesorios externos, hay clases de sesión individuales disponibles. No hay ninguno para el framework Core Bluetooth.

¿Podría alguien ayudarme con qué clase de sesión es adecuada para BLE?


Creo que el problema es simple, intenta implementar tu info.plist como mi pantalla:


Y si lo desea, puede agregar la función en AppDelegate.m bajo didFinishLaunchingWithOptions para habilitar Bluetooth, AirPlay WiFi y más, este es solo un código de ejemplo, pero creo que puede ayudarlo.

NSError *sessionError = nil; [[AVAudioSession sharedInstance] setDelegate:self]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError]; [[AVAudioSession sharedInstance] setActive:YES error:nil]; UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory); UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride); [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

Espero que esto le pueda ayudar.