Android 9 - BluetoothAdapter startDiscovery () не находит ранее найденные устройства - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть приложение для Android, которому несколько лет, и оно работало до Android 9. Мое приложение выполнит сканирование локальных устройств Bluetooth и покажет их в приложении.Это можно сделать, выполнив startDiscovery () на адаптере Bluetooth по умолчанию и перехватив все найденные устройства, зарегистрировав BroadcastReceiver для BluetoothDevice.ACTION_FOUND.

До Android 9 это работает нормально.Я не уверен, что точная версия Android перестала работать, возможно, Android 8 тоже сломался.

Пост Android 9, он работает один раз.Это означает, что при первом запуске startDiscovery () я получу Bluetooth.ACTION_FOUND для всех устройств, но если я выйду из приложения и выполню второй startDiscovery (), он больше не найдет устройства.Как будто Android 9 кеширует результаты и не дает мне способа очистить кеш или получить результаты из кеша.Если я отключу, а затем снова включу устройство Bluetooth, то оно получит новые результаты сканирования.

Вот как выглядит мой код для регистрации BroadcastReceiver (в основном это демонстрационный код, предоставляемый Google):

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...

    // Register for broadcasts when a device is discovered.
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    registerReceiver(mReceiver, filter);
}

// Create a BroadcastReceiver for ACTION_FOUND.
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            // Discovery has found a device. Get the BluetoothDevice
            // object and its info from the Intent.
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            String deviceName = device.getName();
            String deviceHardwareAddress = device.getAddress(); // MAC address
        }
    }
};

@Override
protected void onDestroy() {
    super.onDestroy();
    ...

    // Don't forget to unregister the ACTION_FOUND receiver.
    unregisterReceiver(mReceiver);
}

startLeScan () и BluetoothLeScanner.startScan () работают нормально, но я не могу использовать эти функции, потому что это приложение также поддерживает устройства не BLE.

Я должен упустить что-то простое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...