Я хотел бы реализовать фоновое сканирование Bluetooth на IOS.Когда приложение переходит в фоновый режим, оно вызывает TestCentralManagerDelegate, который реализует функцию DiscoveredPeripheral.Он срабатывает при обнаружении нового периферийного устройства Bluetooth.Если обнаружено новое устройство Bluetooth, приложение считывает производственные данные, которые представлены в словаре advertisingData (в качестве аргумента функции DiscoveredPeripheral).Производственные данные получаются путем вызова ManufactureData = advertisingData ["kCBAdvDataManufacturerData"]. ToString ().Обнаружение данных о производстве было протестировано на двух разных iPhone 5 и 6 с той же iOS 12.1.Когда приложение переходит в фоновый режим, я заблокировал экран.В случае iPhone 5s я заметил, что ManufactureData обнаруживалась каждый раз, когда запускалась функция DiscoveredPeripheral.Этот факт не относится к iPhone 6, каждый раз, когда я получаю ManufactureData = null.Стоит отметить, что данные о производстве поступают в обоих случаях, если экран не заблокирован.
Я не понимаю, почему iPhone 6 не находит ManufactureData, а iPhone 5s - нет.Я бы согласился с тем фактом, что телефоны имеют разные операционные системы, и это подразумевает разные ответы, но в моем случае это не так.Я буду признателен за любую помощь для лучшего понимания вышеупомянутой проблемы.
Вот код, который я использую 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);
}
}