我在论坛上的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/