Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

BLE device keep connect with iPhone when application terminate

I got a problem with BLE on iOS. My case as below: I'm developing application connect to device BLE 4.0. My problem is incoming call function. The scenario of this function is after connected between device BLE and application, when phone is received a phone call, my application will send data to BLE device and make it vibrate and light blinking.

Current I tried 4 case below, but successful in 3 case and the rest case is fail:

  • Case 1:(successful) When app on Foreground --> Incoming call --> App can send vibrate and light blinking message to BLE device

  • Case 2:(successful) When click home and app go to background--> Incoming call --> App can send vibrate and light blinking message to BLE device

  • Case 3:(successful) When click home and app go to background and click sleep mode button --> Incoming call --> App can send vibrate and light blinking message to BLE device

  • Case 4:(FAIL) When click double on home button and termianate app on background (remove app on task manager)--> Incoming call --> App cannot send vibrate and light blinking message to BLE device

Do anyone get same this case before and have any experience, idea for this help?

Thanks for your support!

like image 255
Leo Avatar asked Sep 06 '16 15:09

Leo


People also ask

What is BLE in settings on iPhone?

There are two types of Bluetooth in Apple devices, Bluetooth Classic and Bluetooth Low Energy (BLE).

Does BLE support multiple connections?

x protocol SPEC, when the iPhone/Android phone play as role of BLE central mode, the limitation to have active connection at the same time is up to 8 devices.

How many BLE devices can be connected to iPhone?

How Many Bluetooth Connections at Once – iPhone. So, to summarize, you can have up to seven different Bluetooth devices connected to your iPhone at once but, realistically, you can have three or four devices connected via Bluetooth at once.

Is pairing required for BLE?

cpp already told you in his answer pairing (the exchange of keys) and bonding (saving of said keys) is not required for the communication with BLE devices and only needed if the device requires a secured connection.


1 Answers

On iOS, there are two ways an app is completely terminated:-

  1. System terminates the app (because for example the app is not used for a long time and the system kills it to save memory).
  2. The user terminates/kills the app.

For the first scenario, you need to add support for State Preservation and Restoration. From Documentation Archive from Apple:-

Because state preservation and restoration is built in to Core Bluetooth, your app can opt in to this feature to ask the system to preserve the state of your app’s central and peripheral managers and to continue performing certain Bluetooth-related tasks on their behalf, even when your app is no longer running. When one of these tasks completes, the system relaunches your app into the background and gives your app the opportunity to restore its state and to handle the event appropriately.

Basically, you need to add code to support this feature as it is not enabled by default. Please have a look at the link below, specifically the section "Adding Support for State Preservation and Restoration":-

Core Bluetooth Background Processing for iOS Apps

For the second scenario, if the user terminates/kills the app, then there is no way for the app to restore or relaunch itself. There is a security and behavioural reason for this in that if there is a bug or an issue and you force killed the app, you wouldn't want your app to somehow relaunch itself, because otherwise you'll end in an infinite loop and you will never be able to fully terminate the buggy app. Please have a look at the following link that further explains this:-

https://www.raywenderlich.com/1395-state-restoration-tutorial-getting-started https://medium.com/arkulpa/ios-stay-connected-to-an-external-ble-device-as-much-as-possible-699d434846d2

This is also mentioned indirectly in the Documentation Archive:-

Apps that support background execution may be relaunched by the system to handle incoming events. If an app is terminated for any reason other than the user force quitting it, the system launches the app when one of the following events happens...

I hope this helps.

like image 196
Youssif Saeed Avatar answered Oct 14 '22 17:10

Youssif Saeed