我在论坛上看到,在单点触控样本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
答案 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框架的特定演示, 但您可以查看此示例代码以了解其工作原理: