解决MonoTouch核心蓝牙中的“CBConcreteCentralManager未启动”问题

时间:2012-12-01 08:15:59

标签: ios xamarin.ios bluetooth core-bluetooth

目前正试图让Bluteooth示例正常运作。

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

我的设备已启用蓝牙。

我尝试过使用以下代码:

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

我尝试编写自己的委托继承自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

环顾这个错误我发现了几个点击:

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

我尝试推迟开始直到州改变:

    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没有启动意味着如何在这里解决它?

1 个答案:

答案 0 :(得分:4)

答案:要在MonoTouch中解决这个问题,我必须使用不同的构造函数:

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

当我切换到它开始工作时......