Solving 'CBConcreteCentralManager is not powered on' in Core Bluetooth in MonoTouch

人盡茶涼 提交于 2019-12-14 02:24:06

问题


Currently trying to get a Bluteooth sample working.

I'm using this sample as reference - http://developer.apple.com/library/mac/#samplecode/HeartRateMonitor/Listings/HeartRateMonitor_HeartRateMonitorAppDelegate_m.html#//apple_ref/doc/uid/DTS40011322-HeartRateMonitor_HeartRateMonitorAppDelegate_m-DontLinkElementID_4

Bluetooth is enabled on my device.

I've tried using code like:

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

and I've tried writing my own delegate inheriting from CBCentralManagerDelegate

but when I call StartScan

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

then I see an error:

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

Looking around for this error I've found just a couple of hits:

  • What causes CBCentralManagerStateUnknown in iOS?
  • http://www.zitao.org/wiki/development-log/le-zeng/2012-Nov-week1-devnote.html

But neither of these is particularly helpful...

I tried delaying start until the state changed:

    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;          
        }
    }
  • but this never seems to be called.

I've also tried to run the xcode sample, but the force is not with me today...

Anyone got any ideas what CBConcreteCentralManager: 0x9beea0 is not powered on means and how to solve it here?


回答1:


Answer: To get past this in MonoTouch I had to use a different constructor:

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

When I switched to that it started working...



来源:https://stackoverflow.com/questions/13657695/solving-cbconcretecentralmanager-is-not-powered-on-in-core-bluetooth-in-monoto

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!