Xamarin.iOS CoreBluetooth /外部附件问题

时间:2014-09-06 00:39:09

标签: ios bluetooth xamarin.ios xamarin

我在论坛上看到,在单点触控样本GIT中心,并且从未找到使用CoreBluetooth以实现以下功能的真正功能性示例: 1.检查是否存在与配对和连接的标准(通过名称或设备的某些标识符)匹配的设备 2.如果已配对但未连接,请尝试连接 3.如果连接失败,则显示与主题1上的标准匹配的蓝牙设备列表,以便用户可以选择并连接到它

注意:我尝试连接的设备使用SPP但已通过Apple MFi认证。它是一个通过蓝牙的信用卡读卡器,有些甚至可以实现ExternalAccessory协议

CoreBluetooth示例页面为空http://developer.xamarin.com/samples/ios/CoreBluetooth/

我正在尝试这个非常简单的示例,它永远不会在扫描后调用事件:

public static class BTHelper
    {
        private static CBCentralManager manager;
        private static CBUUID UUID;

        static BTHelper()
        {
            manager =
            manager.DiscoveredPeripheral += OnDiscovery;
            manager.ConnectedPeripheral += OnConnected;
            manager.DisconnectedPeripheral += OnDisconnected;
            UUID = CBUUID.FromString("00001101-0000-1000-8000-00805F9B34FB");
        }

        public static void CheckBluetooth()
        {
            manager.ScanForPeripherals(new[] { UUID });
        }

        static void OnDisconnected(object sender, CBPeripheralErrorEventArgs e)
        {
            Console.WriteLine("Disconnected - " + e.Peripheral.Name);
        }

        static void OnConnected(object sender, CBPeripheralEventArgs e)
        {
            Console.WriteLine("Connected - " + e.Peripheral.Name);
        }

        static void OnDiscovery(object sender, CBDiscoveredPeripheralEventArgs e)
        {
            Console.WriteLine("Found - " + e.Peripheral.Name);
        }
    }

有人可以帮忙吗?我真的厌倦了谷歌上的搜索和关于SO的许多问题没有真正的答案。

@XamarinTeam,你们应该提供一个如何使用它的样本......我们在没有参考的情况下迷失了......

谢谢,非常感谢任何帮助...

Gutemberg

1 个答案:

答案 0 :(得分:3)

您似乎在查看错误的文档。核心蓝牙仅允许您使用GATT配置文件与蓝牙低功耗(BLE)设备进行通信。你无法使用corebluetooth扫描SPP设备。

对于您的MFI设备,您需要检查外部附件框架,它允许使用串行端口协议(SPP)等配置文件与“传统”蓝牙设备进行通信。

回答你的问题: :1。检查是否有符合条件的设备(通过名称或设备的某些标识符)配对和连接

  
    

您可以使用showBluetoothAccessoryPicker的{​​{1}}功能获取可用设备列表,了解详情here

  

2.如果已配对但未连接,请尝试连接

  
    

没有任何记录的方法来检查这一点。如果没有EAAccessoryManager,您无法启动应用连接。你可以监控     EAAccessoryDidConnect通知。如果未调用此方法,并且调用showbluetoothaccessorypicker的complition,则表示您的设备未连接。

  

3.如果连接失败,则显示与主题1上的标准匹配的蓝牙设备列表,以便用户可以选择并连接到它 1)

  
    

完成showBluetoothAccessoryPicker后,您可以登记showbluetoothaccessorypicker。如果不可用,请致电ConnectedAccessories以显示配件列表。

  

在代码中使用外部附件框架的示例代码

showbluetoothaccessorypicker

EAAccessoryManager manager= EAAccessoryManager.SharedAccessoryManager;
var allaccessorries= manager.ConnectedAccessories;
foreach(var accessory in allaccessorries)
{
    yourlable.Text = "find accessory";
    Console.WriteLine(accessory.ToString());
    Console.WriteLine(accessory.Name);
    var protocol = "com.Yourprotocol.name";

    if(accessory.ProtocolStrings.Where(s => s == protocol).Any())
    {
        yourlable.Text = "Accessory  found";
        //start session
        var session = new EASession(accessory, protocol);
        var outputStream = session.OutputStream;
        outputStream.Delegate = new MyOutputStreamDelegate(yourlable);
        outputStream.Schedule(NSRunLoop.Current, "kCFRunLoopDefaultMode");
        outputStream.Open();
    }
}

没有任何关于使用Exeternal Accessory框架的特定演示, 但您可以查看此示例代码以了解其工作原理:

Whole Project

AccessoryBrowser class