BluetoothAdapter ActionDiscoveryFinished

Я только начал смотреть на xamarin, и теперь я хочу искать Bluetooth-устройства. Поэтому я использую следующий код:

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 -Method вызывается правильно. Моя проблема заключается в следующем: как получить найденные устройства из параметров OnReceive-Method?

Ответы

Ответ 1

ACTION_DISCOVERY_FINISHED не говорит вам ничего, кроме действия обнаружения. https://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html#ACTION_DISCOVERY_FINISHED

Если вы хотите захватить устройства из сканирования, вы должны прочитать, что startDiscovery() говорит о поиске устройств:

Процесс обнаружения обычно включает в себя сканирование запросов около 12 секунд, а затем проверку страницы каждого нового устройства для получения его имени Bluetooth.

Это асинхронный вызов, он немедленно вернется. Зарегистрируйте для ACTION_DISCOVERY_STARTED и ACTION_DISCOVERY_FINISHED намерения точно определить, когда открытие начинается и завершается. Зарегистрируйтесь для ACTION_FOUND, чтобы получать уведомления о наличии удаленных устройств Bluetooth.

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 - что закончит обнаружение