【问题标题】:BluetoothAdapter ActionDiscoveryFinished蓝牙适配器 ActionDiscoveryFinished
【发布时间】:2016-08-23 22:36:41
【问题描述】:

我刚开始看 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-Method 被正确调用。我现在的问题是:如何从 OnReceive-Method 的参数中获取找到的设备?

【问题讨论】:

    标签: c# android xamarin bluetooth


    【解决方案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_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) 这些设备是什么类型的蓝牙?经典还是 LE? 2) 这个带有两个经典蓝牙设备的示例是否适合您?
    【解决方案2】:

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

    这不仅抽象了特定于平台的东西,提供了一个简单的界面来使用,而且还为您提供了开箱即用的多平台支持。

    我知道这可能不是您要寻找的答案,但归根结底,这就是 Xamarin 的主要优势所在 - 一次编写,随处运行,等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-12
      • 2019-02-06
      相关资源
      最近更新 更多