user2214220 user2214220 - 10 months ago 61
iOS Question

i schedule a Timer to read RSSI using readRSSI function ,but the timer stops when my app go into background

I schedule a Timer to read RSSI using readRSSI function
,but the timer stops when my app go into background. Maybe there is a good method to get RSSI value from peripheral's notification when app comes into background
. But I don't know how to do.
Could anybody help me?
Anyone has a better method?

Answer Source

I have got the same problem, and I have two idea.

1.

First, you should have some service that got corebluetooth delegate periodly. F or my example, I have a battery service that I can got delegate with didUpdateValueForCharacteristic periodly.

Second, set readRSSI function in didUpdateValueForCharacteristic. And don't forget to set background mode with Corebluetooth.So now you can got the RSSI updating when update battery value.

This works fine for me, but I got another idea from some sample code.

2.

Use the code below whenever you want to start the RSSI reader:

NSTimer *rssiTimer; 
[rssiTimer invalidate];    
rssiTimer = [NSTimer timerWithTimeInterval:1.0 target:peripheral selector:@selector(readRSSI) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop]addTimer:rssiTimer forMode:NSRunLoopCommonModes];

It works fine for me too.