在MonoTouch的Core Bluetooth中解决“CBConcreteCentralManager未开机”的问题

目前正试图让Bluteooth样本工作。

我使用此示例作为参考 – http://developer.apple.com/library/mac/#samplecode/HeartRateMonitor/Listings/HeartRateMonitor_HeartRateMonitorAppDelegate_m.html#//apple_ref/doc/uid/DTS40011322-HeartRateMonitor_HeartRateMonitorAppDelegate_m-DontLinkElementID_4

我的设备上启用了蓝牙function。

我已经尝试使用如下代码:

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

我已经尝试编写自己的inheritance自CBCentralManagerDelegate的委托

但是当我打电话给StartScan

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

然后我看到一个错误:

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

寻找这个错误,我发现只是几个点击:

  • 什么原因导致CBCentralManagerStateUnknown在iOS?
  • http://www.zitao.org/wiki/development-log/le-zeng/2012-Nov-week1-devnote.html

但是这些都不是特别有用…

我试图拖延开始,直到状态改变:

  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; } } 
  • 但这似乎从未被称为。

我也尝试过运行xcode示例,但是这个力量今天不在我身边

任何人都有什么想法CBConcreteCentralManager:0x9beea0没有通电意味着如何解决这里?

答案:为了在MonoTouch中实现这个function,我必须使用不同的构造函数:

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

当我切换到它开始工作…