【问题标题】:Solving 'CBConcreteCentralManager is not powered on' in Core Bluetooth in MonoTouch在 MonoTouch 中解决核心蓝牙中的“CBConcreteCentralManager 未通电”
【发布时间】:2012-11-19 09:50:52
【问题描述】:

目前正在尝试使蓝牙示例正常工作。

我将此示例用作参考 - 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 is not power on 是什么意思吗?这里如何解决?

【问题讨论】:

    标签: ios xamarin.ios bluetooth core-bluetooth


    【解决方案1】:

    答案:为了在 MonoTouch 中解决这个问题,我不得不使用不同的构造函数:

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

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

    【讨论】:

    • 你是对的。绑定生成器会创建默认构造函数(除非被告知不要这样做),而关于它的 Apple 文档可能是 inited 缺乏相当多的内容。本周我发现了 CoreBluetooth 额外的 ctors(因为它们在使用 OSX 的处理时崩溃),它们将在下一个 MT 版本中标记为[Obsolete]
    • 谢谢 :) 我的其他发现在 forums.xamarin.com/discussion/476/… - 感觉像是 .Net Guid 到 CBUUID 转换的问题。我现在仍然无法连接到我的 sphero 工作 - 不知道为什么,因为 Sphero 文档也有点缺乏!如果您想讨论,请在该论坛帖子上见(StackOverflow cmets 不适合聊天!)
    • 我认为问题在于.Net无法区分Guid空数组和CBUUID空数组,你必须指定类型。我刚刚使用了“new CBUUID[] {}”并且它有效..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2014-11-25
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 2015-09-14
    相关资源
    最近更新 更多