У меня есть приложение для 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.
Я должен упустить что-то простое.