BluetoothAdapter ActionDiscoveryFinished

时间:2016-08-23 22:36:41

标签: c# android xamarin bluetooth

我刚刚开始看看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))
        {

        }
    }
}

我还将我的应用的权限设置为BLUETOOTHBLUETOOTH_ADMIN。一切正常,OnReceive - 方法被正确调用。我现在的问题是:如何从OnReceive-Method的参数中获取找到的设备?

2 个答案:

答案 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

在事件序列中,您将执行以下操作:

  1. ACTION_DISCOVERY_STARTED - 哪个会开始发现
  2. ACTION_FOUND - 哪个会找到设备
  3. ACTION_DISCOVERY_FINISHED - 哪将结束发现

答案 1 :(得分:0)

对于初学者,我建议您研究跨平台的库,例如https://github.com/xabre/xamarin-bluetooth-lehttps://github.com/aritchie/bluetoothle

这不仅抽象了特定于平台的内容,提供了一个简单的操作界面,还为您提供了多平台支持。

我知道这可能不是您要寻找的答案,但是最后,这就是Xamarin的主要优点-编写一次,在任何地方运行等。