1

Моя программа позволяет пользователям подключаться к устройству Bluetooth, и это сохранит UUID. При следующем запуске приложения он автоматически подключается к ранее подключенному устройству.Автоматическое подключение к предыдущему устройству Bluetooth через Objective C

Я сохраняю UUID в [NSUserDefaults standardUserDefaults] в NSArray.

Я могу получить первое устройство и подключиться к нему с помощью метода retrievePeripherals для CBCentralManager и передачи в массив UUID, который я сохранил.

Моя проблема в том, что я не знаю, как обращаться с ошибками. Я хочу, чтобы программа узнала, не удалось ли подключиться к первому UUID и перейти к следующему. Кажется, что метод делегата didRetrievePeripherals извлекает устройство с определенным UUID, даже если я выключил устройство.

У кого-нибудь еще такая же проблема?

ответ

1

retrievePeripherals: использует базовую внутреннюю базу данных bluetooth для возврата CBPeripheral. Как только вы подключитесь к периферии, он будет сохранен в базе данных, и вы сможете его восстановить. Не проверяется, включено ли периферийное устройство или нет.

К сожалению, нет никакого способа определить, по какой причине устройство не доступно, но вы можете создавать свои собственные эвристики:

  • попытки подключения в течение определенного времени, и если вы не получите didConnectPeripheral: обратного вызова в разумное время (обычно несколько секунд), то это периферийное устройство считается вне диапазона, и вы можете продолжить работу со следующим периферийным устройством. Обратите внимание, что connectPeripheral будет продолжать работать (даже в фоновом режиме), если он не удался или не был отменен/завершен.
  • Если периферийное устройство рекламирует, вы также можете попробовать запустить сканирование, чтобы проверить, находится ли он в диапазоне.