我在论坛上的Monotouch示例GIT集线器上看到过此信息,却从未找到使用CoreBluetooth来实现以下功能的真正有用的示例:
1.检查是否有符合标准的设备(通过名称或设备的某些标识符)配对并连接
2.如果配对但未连接,请尝试连接
3.如果连接失败,则显示与主题1上的条件匹配的蓝牙设备列表,以便用户选择并连接到该设备。

注意:我要连接的设备使用SPP,但已通过Apple MFi认证。它是蓝牙上的信用卡读卡器,其中一些甚至还实现了ExternalAccessory协议(protocol)

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);
        }
    }

有人可以帮忙吗?我已经非常厌倦了在Google上进行谷歌搜索和查找许多问题,却没有真正的答案。

@XamarinTeam,你们应该提供一个有关如何使用它的示例...我们迷路了,没有引用...

谢谢,非常感谢您的帮助...

古登堡

最佳答案

似乎您正在查找错误的文档。CoreBluetooth仅允许您使用GATT配置文件与Bluetooth Low Energy(BLE)设备进行通信。您不能使用corebluetooth扫描SPP设备。

对于您的MFI设备,您需要检查External Accessory framework,它允许使用诸如串行端口协议(protocol)(SPP)之类的配置文件与“传统”蓝牙设备进行通信。

要回答您的问题:
:1.检查是否存在符合配对和连接条件的设备(按设备的名称或某些标识符)



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



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



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

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();
    }
}


public class MyOutputStreamDelegate : NSStreamDelegate
{
    UILabel label;
    bool hasWritten = false;

    public MyOutputStreamDelegate(UILabel label)
    {
        this.label = label;
    }
    public override void HandleEvent(NSStream theStream, NSStreamEvent streamEvent)
    {
         //write code to handle  stream.

    }
}

没有使用外部附件框架的任何垂直演示,
但是您可以查看此示例代码以了解其工作原理。:

Whole Project

AccessoryBrowser class

关于ios - Xamarin.iOS CoreBluetooth/外部配件问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25695735/

10-09 06:45