bluetooth background mode IOS when the screen is locked












0















I would like to implement background bluetooth scanning on IOS. When the application goes in background mode it calls TestCentralManagerDelegate which implements DiscoveredPeripheral function. It is triggered when a new bluetooth peripheral device is detected. If a new bluetooth device is detected the application read the manufacture data which is presented in Dictionary advertisementData (as argument of DiscoveredPeripheral function). The manufacture data are obtained by calling ManufactureData = advertisementData["kCBAdvDataManufacturerData"].ToString(). The discovering of the manufacture data was tested on two different iPhones 5s and 6 with the same iOS 12.1. When the application goes in background mode, I locked the screen.
In the case of iPhone 5s, I observed that ManufactureData was found each time
the DiscoveredPeripheral function is triggered. This fact is not true for iPhone 6, each time I got ManufactureData = null. It is worth mentioning that the manufacture data are received in both cases if the screen is not locked.



I do not understand why the iPhone 6 does not find ManufactureData, meanwhile the iPhone 5s does. I would accept the fact that phones have different operating systems and this implies different responses, but in my case this is not the case. I will appreciate any help for better understanding aforementioned problem.



Here is code I am using Xamarin.iOS.



public override  void DiscoveredPeripheral(CBCentralManager central, CBPeripheral peripheral, NSDictionary advertisementData, NSNumber RSSI)
{

try
{
central.StopScan();

if (peripheral == null || advertisementData == null)
{
central.ScanForPeripherals(cbuuids);
return;
}

string ManufactureData;

if (advertisementData.ContainsKey(new NSString("kCBAdvDataManufacturerData")))
{
ManufactureData = advertisementData["kCBAdvDataManufacturerData"].ToString();
}
else
{

ManufactureData = null;

CrossLocalNotifications.Current.Show("no advertising data", "no advertising data", 10);
central.ScanForPeripherals(cbuuids);
return;
}


central.ScanForPeripherals(cbuuids);
}
catch
{
central.ScanForPeripherals(cbuuids);
}

}









share|improve this question























  • I am surprised to hear that you can read the manufacturer data in the background at all. In my previous tests, I have seen this always be nil when the app is in the background (regardless of whether the screen is locked). In my mind the question is why does this work on the 5s? I wonder if it is simply an unintended bug by apple on that device model that is giving you a desirable result?

    – davidgyoung
    Nov 27 '18 at 11:27











  • Thanks for reply. Then I have only one solution connecting to the peripheral device and reading data.

    – Samo Simoncic
    Nov 27 '18 at 18:51
















0















I would like to implement background bluetooth scanning on IOS. When the application goes in background mode it calls TestCentralManagerDelegate which implements DiscoveredPeripheral function. It is triggered when a new bluetooth peripheral device is detected. If a new bluetooth device is detected the application read the manufacture data which is presented in Dictionary advertisementData (as argument of DiscoveredPeripheral function). The manufacture data are obtained by calling ManufactureData = advertisementData["kCBAdvDataManufacturerData"].ToString(). The discovering of the manufacture data was tested on two different iPhones 5s and 6 with the same iOS 12.1. When the application goes in background mode, I locked the screen.
In the case of iPhone 5s, I observed that ManufactureData was found each time
the DiscoveredPeripheral function is triggered. This fact is not true for iPhone 6, each time I got ManufactureData = null. It is worth mentioning that the manufacture data are received in both cases if the screen is not locked.



I do not understand why the iPhone 6 does not find ManufactureData, meanwhile the iPhone 5s does. I would accept the fact that phones have different operating systems and this implies different responses, but in my case this is not the case. I will appreciate any help for better understanding aforementioned problem.



Here is code I am using Xamarin.iOS.



public override  void DiscoveredPeripheral(CBCentralManager central, CBPeripheral peripheral, NSDictionary advertisementData, NSNumber RSSI)
{

try
{
central.StopScan();

if (peripheral == null || advertisementData == null)
{
central.ScanForPeripherals(cbuuids);
return;
}

string ManufactureData;

if (advertisementData.ContainsKey(new NSString("kCBAdvDataManufacturerData")))
{
ManufactureData = advertisementData["kCBAdvDataManufacturerData"].ToString();
}
else
{

ManufactureData = null;

CrossLocalNotifications.Current.Show("no advertising data", "no advertising data", 10);
central.ScanForPeripherals(cbuuids);
return;
}


central.ScanForPeripherals(cbuuids);
}
catch
{
central.ScanForPeripherals(cbuuids);
}

}









share|improve this question























  • I am surprised to hear that you can read the manufacturer data in the background at all. In my previous tests, I have seen this always be nil when the app is in the background (regardless of whether the screen is locked). In my mind the question is why does this work on the 5s? I wonder if it is simply an unintended bug by apple on that device model that is giving you a desirable result?

    – davidgyoung
    Nov 27 '18 at 11:27











  • Thanks for reply. Then I have only one solution connecting to the peripheral device and reading data.

    – Samo Simoncic
    Nov 27 '18 at 18:51














0












0








0








I would like to implement background bluetooth scanning on IOS. When the application goes in background mode it calls TestCentralManagerDelegate which implements DiscoveredPeripheral function. It is triggered when a new bluetooth peripheral device is detected. If a new bluetooth device is detected the application read the manufacture data which is presented in Dictionary advertisementData (as argument of DiscoveredPeripheral function). The manufacture data are obtained by calling ManufactureData = advertisementData["kCBAdvDataManufacturerData"].ToString(). The discovering of the manufacture data was tested on two different iPhones 5s and 6 with the same iOS 12.1. When the application goes in background mode, I locked the screen.
In the case of iPhone 5s, I observed that ManufactureData was found each time
the DiscoveredPeripheral function is triggered. This fact is not true for iPhone 6, each time I got ManufactureData = null. It is worth mentioning that the manufacture data are received in both cases if the screen is not locked.



I do not understand why the iPhone 6 does not find ManufactureData, meanwhile the iPhone 5s does. I would accept the fact that phones have different operating systems and this implies different responses, but in my case this is not the case. I will appreciate any help for better understanding aforementioned problem.



Here is code I am using Xamarin.iOS.



public override  void DiscoveredPeripheral(CBCentralManager central, CBPeripheral peripheral, NSDictionary advertisementData, NSNumber RSSI)
{

try
{
central.StopScan();

if (peripheral == null || advertisementData == null)
{
central.ScanForPeripherals(cbuuids);
return;
}

string ManufactureData;

if (advertisementData.ContainsKey(new NSString("kCBAdvDataManufacturerData")))
{
ManufactureData = advertisementData["kCBAdvDataManufacturerData"].ToString();
}
else
{

ManufactureData = null;

CrossLocalNotifications.Current.Show("no advertising data", "no advertising data", 10);
central.ScanForPeripherals(cbuuids);
return;
}


central.ScanForPeripherals(cbuuids);
}
catch
{
central.ScanForPeripherals(cbuuids);
}

}









share|improve this question














I would like to implement background bluetooth scanning on IOS. When the application goes in background mode it calls TestCentralManagerDelegate which implements DiscoveredPeripheral function. It is triggered when a new bluetooth peripheral device is detected. If a new bluetooth device is detected the application read the manufacture data which is presented in Dictionary advertisementData (as argument of DiscoveredPeripheral function). The manufacture data are obtained by calling ManufactureData = advertisementData["kCBAdvDataManufacturerData"].ToString(). The discovering of the manufacture data was tested on two different iPhones 5s and 6 with the same iOS 12.1. When the application goes in background mode, I locked the screen.
In the case of iPhone 5s, I observed that ManufactureData was found each time
the DiscoveredPeripheral function is triggered. This fact is not true for iPhone 6, each time I got ManufactureData = null. It is worth mentioning that the manufacture data are received in both cases if the screen is not locked.



I do not understand why the iPhone 6 does not find ManufactureData, meanwhile the iPhone 5s does. I would accept the fact that phones have different operating systems and this implies different responses, but in my case this is not the case. I will appreciate any help for better understanding aforementioned problem.



Here is code I am using Xamarin.iOS.



public override  void DiscoveredPeripheral(CBCentralManager central, CBPeripheral peripheral, NSDictionary advertisementData, NSNumber RSSI)
{

try
{
central.StopScan();

if (peripheral == null || advertisementData == null)
{
central.ScanForPeripherals(cbuuids);
return;
}

string ManufactureData;

if (advertisementData.ContainsKey(new NSString("kCBAdvDataManufacturerData")))
{
ManufactureData = advertisementData["kCBAdvDataManufacturerData"].ToString();
}
else
{

ManufactureData = null;

CrossLocalNotifications.Current.Show("no advertising data", "no advertising data", 10);
central.ScanForPeripherals(cbuuids);
return;
}


central.ScanForPeripherals(cbuuids);
}
catch
{
central.ScanForPeripherals(cbuuids);
}

}






background core-bluetooth ios-background-mode






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 24 '18 at 11:18









Samo SimoncicSamo Simoncic

53




53













  • I am surprised to hear that you can read the manufacturer data in the background at all. In my previous tests, I have seen this always be nil when the app is in the background (regardless of whether the screen is locked). In my mind the question is why does this work on the 5s? I wonder if it is simply an unintended bug by apple on that device model that is giving you a desirable result?

    – davidgyoung
    Nov 27 '18 at 11:27











  • Thanks for reply. Then I have only one solution connecting to the peripheral device and reading data.

    – Samo Simoncic
    Nov 27 '18 at 18:51



















  • I am surprised to hear that you can read the manufacturer data in the background at all. In my previous tests, I have seen this always be nil when the app is in the background (regardless of whether the screen is locked). In my mind the question is why does this work on the 5s? I wonder if it is simply an unintended bug by apple on that device model that is giving you a desirable result?

    – davidgyoung
    Nov 27 '18 at 11:27











  • Thanks for reply. Then I have only one solution connecting to the peripheral device and reading data.

    – Samo Simoncic
    Nov 27 '18 at 18:51

















I am surprised to hear that you can read the manufacturer data in the background at all. In my previous tests, I have seen this always be nil when the app is in the background (regardless of whether the screen is locked). In my mind the question is why does this work on the 5s? I wonder if it is simply an unintended bug by apple on that device model that is giving you a desirable result?

– davidgyoung
Nov 27 '18 at 11:27





I am surprised to hear that you can read the manufacturer data in the background at all. In my previous tests, I have seen this always be nil when the app is in the background (regardless of whether the screen is locked). In my mind the question is why does this work on the 5s? I wonder if it is simply an unintended bug by apple on that device model that is giving you a desirable result?

– davidgyoung
Nov 27 '18 at 11:27













Thanks for reply. Then I have only one solution connecting to the peripheral device and reading data.

– Samo Simoncic
Nov 27 '18 at 18:51





Thanks for reply. Then I have only one solution connecting to the peripheral device and reading data.

– Samo Simoncic
Nov 27 '18 at 18:51












0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53457583%2fbluetooth-background-mode-ios-when-the-screen-is-locked%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53457583%2fbluetooth-background-mode-ios-when-the-screen-is-locked%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Wiesbaden

Marschland

Dieringhausen