我刚刚开始看看xamarin,现在我想扫描蓝牙设备。因此,我使用以下代码:
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.DefaultAdapter;
bluetoothAdapter.StartDiscovery();
我有以下class
来获得结果:
[BroadcastReceiver]
[IntentFilter(new [] {BluetoothAdapter.ActionDiscoveryFinished})]
public class BluetoothReceiver : BroadcastReceiver
{
public BluetoothReceiver()
{
}
public override void OnReceive(Context context, Intent intent)
{
if (BluetoothAdapter.ActionDiscoveryFinished.Equals(intent.Action))
{
}
}
}
我还将我的应用的权限设置为BLUETOOTH
和BLUETOOTH_ADMIN
。一切正常,OnReceive
- 方法被正确调用。我现在的问题是:如何从OnReceive-Method的参数中获取找到的设备?
答案 0 :(得分:0)
ACTION_DISCOVERY_FINISHED
不会告诉您任何其他内容。 https://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html#ACTION_DISCOVERY_FINISHED
如果你想从扫描中获取设备,你应该阅读startDiscovery()
关于查找设备的内容:
发现过程通常包括大约12秒的查询扫描,然后对每个新设备进行页面扫描以检索其蓝牙名称。
这是一个异步调用,它会立即返回。注册ACTION_DISCOVERY_STARTED和ACTION_DISCOVERY_FINISHED意图以确定发现何时开始和完成。注册ACTION_FOUND以在找到远程蓝牙设备时收到通知。
https://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html#startDiscovery()
因此,您应该使用ACTION_FOUND
并解析EXTRA_DEVICE
设备:
广播行动:发现远程设备。
在发现过程中找到远程设备时发送。
始终包含额外字段EXTRA_DEVICE和EXTRA_CLASS。如果可用,可以包含额外字段EXTRA_NAME和/或EXTRA_RSSI。
https://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#ACTION_FOUND
在事件序列中,您将执行以下操作:
ACTION_DISCOVERY_STARTED
- 哪个会开始发现ACTION_FOUND
- 哪个会找到设备ACTION_DISCOVERY_FINISHED
- 哪将结束发现答案 1 :(得分:0)
对于初学者,我建议您研究跨平台的库,例如https://github.com/xabre/xamarin-bluetooth-le,https://github.com/aritchie/bluetoothle
这不仅抽象了特定于平台的内容,提供了一个简单的操作界面,还为您提供了多平台支持。
我知道这可能不是您要寻找的答案,但是最后,这就是Xamarin的主要优点-编写一次,在任何地方运行等。