Bluetooth не доступен - попробуйте позже - PullRequest
4 голосов
/ 05 октября 2010

Вчера я запрограммировал простую сеть Bluetooth для своего приложения для iPhone.Сегодня утром, когда я попытался продолжить разработку, она внезапно перестала работать на моем iPod Touch 2G.Однако на iPAD все работает отлично.Проблема возникает, когда я пытаюсь установить доступность моего объекта GKSession на YES на iPod, создав сеанс сервера.Консоль получает следующее:

2010-10-05 14:28:55.762 Clusters[67:307] BTM: attaching to BTServer
2010-10-05 14:28:55.786 Clusters[67:307] <<< Session >>> +[GKBluetoothSupport _determineBluetoothStatus]: BT not available - try again later.
2010-10-05 14:28:55.862 Clusters[67:307] BTM: posting notification BluetoothAvailabilityChangedNotification

Теперь я знаю, что Bluetooth включен, и я знаю, что он работает, потому что я загрузил бесплатное приложение для передачи Bluetooth, чтобы проверить это.Я перезагрузил свой iPod, очистил свои цели, ткнул и подтолкнул различные части кода, но я просто не могу понять, почему приложение не может создать сервер Bluetooth.Он может просто создать клиента Bluetooth , так как приложение может получать данные, отправленные моим iPad, очень хорошо.

Кто-нибудь может высказать какие-либо предложения относительно того, что может происходить здесь?Я нахожусь в конце моего остроумия.

Ответы [ 3 ]

3 голосов
/ 06 октября 2010

Точно, поработав в этот весь этот проклятый день с миллионом и одним тупиком, я наконец обнаружил виновника.Моя подпрограмма "пинг".Как я полагаю, большинству людей известно, что сетевой сеанс должен получать регулярные данные, иначе он отключится и сам закроется.Чтобы этого не случилось, я настроил простую подпрограмму для отправки небольшого пакета данных (4 байта) раз в десять секунд всем одноранговым узлам.Эта проблема?Использование метода [GKSession SendDataToAllPeers: withDataMode: error:] приведет к тому, что ваш сервер будет работать по-королевски, если нет подключенных пиров.По какой-то причине жизненно важная проверка на предмет того, был ли кто-либо подключен вообще, была опущена.Я решил проблему, поместив простой предикат в мою процедуру пинга следующим образом:

if ([[network peersWithConnectionState:GKPeerStateConnected] count] > 0) {ping code here}

И снова он работает.Я не могу вспомнить, чтобы эта проблема случалась раньше или почему она не должна возникать на iPad, работающем на более ранних версиях ОС.Я могу только догадываться, что какое-то более позднее обновление вызвало проблему.В любом случае, теперь все исправлено, и хотя моя программа далека от водонепроницаемости, я могу, по крайней мере, теперь сконцентрироваться на том, чтобы заставить остальную часть работать.

1 голос
/ 15 марта 2012

Есть еще одна вещь, которую вы должны сделать: закрыть сеанс GKS перед завершением работы приложения.Ваш код может выглядеть примерно так:

// YourAppDelegate.m
- (void)applicationWillTerminate:(UIApplication *)application
{
  [[Business sharedInstance] shutdownBluetooth];
}

// Business.m
// considering that you have a GKSession instance on 'session' variable
- (void)shutdownBluetooth {
  [self.session disconnectFromAllPeers];
  self.session.available = NO;
  [self.session setDataReceiveHandler:nil withContext:nil];
  self.session.delegate = nil;
  self.session = nil;
}

По моему опыту, этого было достаточно, чтобы решить эту проблему.

0 голосов
/ 17 ноября 2011

У меня была такая же проблема.

Первые две строки говорят, что Bluetooth недоступен, но третья строка указывает на изменение доступности.Хотя оно не зарегистрировано, на самом деле это говорит о том, что Bluetooth меняется на доступный.

Так что в основном это сообщение журнала является огромным отвлечением и должно быть просто проигнорировано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...