xamarin.android蓝牙,xamarin-bluetooth-le

为维护人员查找 : 最近我们专门支持这个库的时间非常有限,我们会感谢任何志愿者,他们会帮助维护这个有用插件:)。 请发表评论 #274: ) 谢谢

icon_small.png 用于 Xamarin 的蓝牙LE插件

68747470733a2f2f7777772e626974726973652e696f2f6170702f336665353464306135663433633262662e7376673f746f6b656e3d69394c555934724965635a57645f336a376877586777

用于访问蓝牙功能的Xamarin和MvvMCross插件。 插件是松散的基于BLE实现的猴机器人。

重要注意: with"香草",我们指的是非 mvvmcross/pure Xamarin版本。 你可以使用 ,如果你下载了vanilla软件包的话,可以使用它。

支持&限制平台版本限制Xamarin.Android4.3

Xamarin.iOS7.0

安装//stable

Install-Package Plugin.BLE

//or pre-release

Install-Package Plugin.BLE -Pre

68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f506c7567696e2e424c452e7376673f6c6162656c3d4e75476574267374796c653d666c61742d737175617265

68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f767072652f506c7567696e2e424c452e7376673f6c6162656c3d4e7547657425323042657461267374796c653d666c61742d737175617265

MvvmCrossInstall-Package MvvmCross.Plugin.BLE

//or

Install-Package MvvmCross.Plugin.BLE -Pre

68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f4d76766d43726f73732e506c7567696e2e424c452e7376673f6c6162656c3d4e754765742532304d76764d43726f7373267374796c653d666c61742d737175617265

68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f767072652f4d76766d43726f73732e506c7567696e2e424c452e7376673f6c6162656c3d4e754765742532304d76764d43726f737325323042657461267374796c653d666c61742d737175617265

Android

将这些权限添加到 AndroidManifest.xml。 对于 Marshmallow 和上,请按照 Marshmallow 请求运行时权限,并不要忘记提示用户输入位置权限。

如果你想声明你的应用程序可以用于可以ble设备,只需 ,请将该行添加到你的清单中。

示例应用程序

我们提供一个示例 Xamarin.Forms 应用程序,这是一个基本的蓝牙镜头扫描程序。 有了这个应用,就有可能检查ble状态

发现设备

连接/断开

发现服务

发现特征

查看特征详细信息

读/写和 register 用于特性的通知

查看代码并使用它作为起始点,了解插件和使用它的起点。

用法varble= CrossBluetoothLE.Current;varadapter= CrossBluetoothLE.Current.Adapter;

MvvmCross

MvvmCross插件将 IBluetoothLE 和 IAdapter 注册为惰性初始化的单例。 你可以像任何其他MvvmCross服务那样解析/注入它们。 你不需要解析/插入两者。 这取决于你的情况。varble= Mvx.Resolve();varadapter= Mvx.Resolve();

或者MyViewModel(IBluetoothLE ble, IAdapter adapter)

{

this.ble = ble;

this.adapter = adapter;

}

IBluetoothLE获得蓝牙状态varstate= ble.State;

你还可以侦听状态更改。 所以如果用户在智能手机上打开/关闭蓝牙,你可以做出React。ble.StateChanged += (s, e) =>

{

Debug.WriteLine($"The bluetooth state changed to{e.NewState}");

};

IAdapter扫描设备adapter.DeviceDiscovered += (s,a) => deviceList.Add(a.Device);awaitadapter.StartScanningForDevicesAsync(); ScanTimeout

设置 adapter.ScanTimeout 以指定扫描的最长持续时间。 ScanMode

设置 adapter.ScanMode 以指定扫描模式。 必须在调用 StartScanningForDevicesAsync() 前设置为。 扫描时更改它不会影响当前扫描。连接到设备

ConnectToDeviceAsync 返回一个任务,如果设备已经成功连接,则完成该任务。 否则 DeviceConnectionException 会被丢弃。try

{

await _adapter.ConnectToDeviceAsync(device);

}catch(DeviceConnectionException e)

{

//... could not connect to device}连接到已知设备

ConnectToKnownDeviceAsync 只能通过传递GUI连接到设备。 这意味着如果设备GUID已经知,则无需扫描即可以连接到设备。 对于快速背景重新连接非常有用。 始终使用这里方法的取消令牌。即使超过了 ,它将尝试连接,即使超出范围,那么取消它的唯一方法就是使用令牌。

如果设备超出范围的话,这将在几秒钟内引发GATT错误。try

{

await _adapter.ConnectToKnownDeviceAsync(guid, cancellationToken);

}catch(DeviceConnectionException e)

{

//... could not connect to device}获取服务varservices= awaitconnectedDevice.GetServicesAsync();

或者获取特定服务:varservice= awaitconnectedDevice.GetServiceAsync(Guid.Parse("ffe0ecd2-3d16-4f8d-90de-e89e7fc396a5"));获得特性varcharacteristics= awaitservice.GetCharacteristicsAsync();

或者获得一个特定的特征:varcharacteristic= awaitservice.GetCharacteristicAsync(Guid.Parse("d8de624e-140f-4a22-8594-e2216b84a5f2"));读特性varbytes= awaitcharacteristic.ReadAsync();写特性awaitcharacteristic.WriteAsync(bytes);特性通知characteristic.ValueUpdated += (o, args) =>

{

varbytes= args.Characteristic.Value;

};awaitcharacteristic.StartUpdatesAsync();获取描述符vardescriptors= awaitcharacteristic.GetDescriptorsAsync();读取描述符varbytes= awaitdescriptor.ReadAsync();写入描述符awaitdescriptor.WriteAsync(bytes);获取系统设备

返回所有连接或者绑定( 仅 Android ) 至系统的BLE设备。 为了在应用程序中使用该设备,你必须首先调用 ConnectAsync。varsystemDevices= adapter.GetSystemConnectedOrPairedDevices();foreach(var device in systemDevices)

{

await _adapter.ConnectToDeviceAsync(device);

}

警告重要的注释/api限制 !

BLE API实现( 尤其是在的安卓 ) 具有以下限制:characterisitc/descriptor写: 确保调用特性。 ,,,,,,,,,,GattWriteError。

顺序调用: 在调用下一个ble命令之前,等待前一个ble命令完成前的等待。 Android需要调用为 seriall,否则不等待之前的调用的调用将失败,某些类型的调用将失败。 更明确的例子:如果你在视图生命周期中调用这个方法,所有这些方法返回 void void 100% not在这里等待任何等待 bleCommand(),其他生命周期方法都会被调用。

扫描服务筛选器: 在 specifically specifically specifically scan扫描服务过滤器不工作。 对于 android 4.3,你必须使用一个解决方案和扫描没有过滤器,然后手动筛选数据( 它包含已经发布的服务 guid )。

最佳实践

API在 try-catch blocks中环绕异步API调用。 大多数BLE调用都会在cetain中抛出异常,这是Android的especiialy true。 我们将尝试更新xml文档以反映这一点。try {

await _adapter.ConnectToDeviceAsync(device);

}

catch(DeviceConnectionException ex)

{

//specific }

catch(Exception ex)

{

//generic }避免在连接会话中缓存特征或者服务实例。 这样做包括在连接会话时保存对它们的引用:设备断开所有服务&特征实例的连接将成为无效的电子邮件。 Allways 使用GetServiceAsync和GetCharacteristicAsync获得有效的实例。

通用 BLE扫描:在扫描设备时避免执行诸如连接。读。写等设备操作。 扫描是电池密集。执行设备操作 (connect/read/write/etc) 之前尝试停止扫描

在找到所需设备后立即停止扫描

从不扫描循环,并设置扫描的时间限制

扩展主题

有用的链接

我们通常在一个带有里程碑的NAME 分支上做我们的开发工作。 因此,请根据当前开放开发分支的请求请求。

许可证

Apache?

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 1024 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值