BluetoothAdapter ActionDiscoveryFinished

Tom*_*tom 16 c# android bluetooth xamarin

我刚刚开始看看xamarin,现在我想扫描蓝牙设备.因此我使用以下代码:

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.DefaultAdapter;
bluetoothAdapter.StartDiscovery();
Run Code Online (Sandbox Code Playgroud)

我得到以下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))
        {

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*las 1

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_DEVICEfor devices:

广播操作:发现远程设备。

在发现过程中发现远程设备时发送。

始终包含额外字段 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- 这将结束发现