Gut*_*iro 11 bluetooth xamarin.ios 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);
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?我真的厌倦了谷歌搜索和寻找很多问题,没有真正的答案.
@XamarinTeam,你们应该提供一个如何使用它的样本......我们迷失了,没有参考......
谢谢,非常感谢任何帮助......
Gutemberg
您似乎正在查看错误的文档。核心蓝牙仅允许您使用 GATT 配置文件与蓝牙低功耗 (BLE) 设备进行通信。您无法使用 corebluetooth 扫描 SPP 设备。
对于您的 MFI 设备,您需要检查外部附件框架,它允许使用串行端口协议 (SPP) 等配置文件与“传统”蓝牙设备进行通信。
回答您的问题: : 1.检查是否有符合条件(通过设备的名称或某些标识符)的设备进行配对和连接
您可以使用
showBluetoothAccessoryPicker
的功能EAAccessoryManager
来获取可用设备的列表,请在此处阅读更多信息
2.如果已配对但未连接,请尝试连接
没有任何记录的方法来检查这一点。如果没有
showBluetoothAccessoryPicker
. 您可以监视 EAAccessoryDidConnect 通知。如果未调用此方法,并且调用了 showbluetoothaccessorypicker 的完成,则您的设备未连接。
3.如果连接失败,则显示符合主题 1 的条件的蓝牙设备列表,以便用户可以选择并连接到它 1)
完成后
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();
}
}
Run Code Online (Sandbox Code Playgroud)
和
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.
}
}
Run Code Online (Sandbox Code Playgroud)
没有任何使用 Exeternal Accessory 框架的特定演示,但您可以查看此示例代码以了解其工作原理:
归档时间: |
|
查看次数: |
2127 次 |
最近记录: |