2012-12-01 1 views
1

En train d'essayer de faire fonctionner un échantillon Bluteooth.Résoudre 'CBConcreteCentralManager n'est pas sous tension' dans Core Bluetooth dans MonoTouch

J'utilise cet exemple comme référence - http://developer.apple.com/library/mac/#samplecode/HeartRateMonitor/Listings/HeartRateMonitor_HeartRateMonitorAppDelegate_m.html#//apple_ref/doc/uid/DTS40011322-HeartRateMonitor_HeartRateMonitorAppDelegate_m-DontLinkElementID_4

Bluetooth est activé sur mon appareil.

J'ai essayé d'utiliser le code comme:

_manager = new CBCentralManager(); 
_manager.DiscoveredPeripheral += HandleDiscoveredPeripheral; 
_manager.ConnectedPeripheral += HandleConnectedPeripheral; 
_manager.DisconnectedPeripheral += HandleDisconnectedPeripheral; 

et j'ai essayé d'écrire mon propre délégué héritant de CBCentralManagerDelegate

mais quand je l'appelle StartScan

void StartScan() 
    { 
     var spp = Guid.Parse("00001101-0000-1000-8000-00805f9b34fb"); 
     _manager.ScanForPeripherals(new [] { spp }, null); 
    } 

je vois une erreur:

bluetooth1[1210:907] CoreBluetooth[WARNING] <CBConcreteCentralManager: 0x9beea0> is not powered on 

En regardant autour de cette erreur que j'ai trouvé juste deux coups:

Mais aucun de ceux-ci est particulièrement utile ...

J'ai essayé retarder le démarrage jusqu'à ce que l'état change:

void HandleUpdatedState (object sender, EventArgs e) 
    { 
     // more to do here.... 
     Console.WriteLine("State updated " + e.ToString()); 

     switch (_manager.State) { 
     case CBCentralManagerState.PoweredOn: 
      _manager.DiscoveredPeripheral += HandleDiscoveredPeripheral; 
      _manager.ConnectedPeripheral += HandleConnectedPeripheral; 
      _manager.DisconnectedPeripheral += HandleDisconnectedPeripheral; 
      StartScan(); 
      break;   
     case CBCentralManagerState.Unauthorized: 
      break;   
     } 
    } 
  • mais cela ne semble jamais être appelé.

J'ai aussi essayé de courir l'échantillon de Xcode, mais la force n'est pas avec moi aujourd'hui ...

Tout le monde a des idées ce que CBConcreteCentralManager: 0x9beea0 est pas sous tension sur les moyens et la façon de le résoudre ici?

Répondre

4

Réponse: Pour passer cela dans MonoTouch je devais utiliser un constructeur différent:

CBCentralManager(_delegate, MonoTouch.CoreFoundation.DispatchQueue.CurrentQueue) 

Quand je suis passé à ce qu'il a commencé à travailler ...

+1

Vous avez raison. Le générateur de liaison crée un constructeur par défaut (à moins qu'on ne lui dise de ne pas le faire) et la documentation d'Apple sur ce qui peut être 'init'ed manque un peu. J'ai découvert les extra-cœurs de CoreBluetooth cette semaine (puisqu'ils se plantent au moment de la disposition en utilisant OSX) et ils seront marqués comme '[Obsolete]' dans les prochaines versions MT. – poupou

+0

Merci :) Mes autres résultats sont sur http://forums.xamarin.com/discussion/476/corebluetooth-spp-sample#latest - se sent comme un problème avec .Net Guid à la traduction CBUUID. Je ne parviens toujours pas à avoir de connexion avec mon sphero en ce moment - je ne sais pas pourquoi les docs de Sphero font aussi un peu défaut! Si vous voulez discuter, alors vous voir sur ce fil de discussion (StackOverflow commentaires pas aussi bon pour le chat!) – Stuart

+0

Je pense que le problème est que .Net ne peut pas faire la distinction entre un tableau Guid nul et tableau nul CBUUID, vous devez spécifier le type . Je viens d'utiliser "new CBUUID [] {}" et ça marche .. – Rogier

Questions connexes