Bluetooth подключен, но не отправляет данные

#java #android #bluetooth

#java #Android #bluetooth

Вопрос:

Я работаю над проектом, подключающим мой телефон Android к приемопередатчику Arduino bluetooth. Он работает нормально, пока телефон не перейдет в режим ожидания (сна?); когда это происходит, соединение Bluetooth, которое я устанавливаю, кажется, все еще существует, но данные не передаются. Я использую Android Sdk 30.

Вот что я делаю: у меня есть список пользовательского интерфейса с устройствами BT, которые пользователь может выбрать; после выбора одного из них вызывается для подключения:

 // in my BluetoothService class
private BluetoothDevice bluetoothDevice;
private BluetoothSocket bluetoothSocket;

public void connect(BluetoothDevice device) {
    try {
        bluetoothDevice = device;
        String uuid = getString(R.string.bluetooth_uuid);
        bluetoothSocket = bluetoothDevice.createInsecureRfcommSocketToServiceRecord(UUID.fromString(uuid));
        bluetoothSocket.connect();
        if (bluetoothSocket.isConnected()) {
            Log.i(TAG, "connected to "   device   " with socket "   bluetoothSocket);
        } else {
            Log.w(TAG, "still not connected to "   device   " with socket "   bluetoothSocket);
        }
    } catch (IOException e) {
        Log.e(TAG, "failed to connect to device", e);
    }
}
 

Итак, опять же, это работает нормально; соединение установлено, и данные отправляются / принимаются.

Теперь я отправляю данные каждые 30 секунд, а на стороне приемника загорается светодиод, пока не пройдет 60 секунд без получения данных.

 private ScheduledFuture<?> sendScheduler; // canceled in onDestroy()
public void onCreate() {
    sendScheduler = Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(() -> {
        sendData(lastLevelSent); // i can post sendData, but it works in normal state
    }, 30, 30, TimeUnit.SECONDS);
}
 

Теперь, когда телефон переходит в спящий режим (т.Е. Я нажимаю кнопку питания один раз), индикатор гаснет через 60 секунд, т.Е. Данные не принимаются. Однако само соединение, похоже, все еще установлено (я могу судить по тому, как мигает индикатор приемника).

Когда я запускаю резервное копирование устройства, оно не возобновляет отправку данных. Кнопка отключения в моем приложении не работает ( bluetoothSocket.close() ), и повторная попытка подключения к устройству тоже не работает. Я должен закрыть приложение, тогда я могу отключиться.

Проверка, которую я использую, является ли соединение все еще действительным bluetoothSocket != null amp;amp; bluetoothSocket.isConnected() .

Я добавил свое приложение в «не переводить в режим ожидания» в настройках Android.

Итак, как я могу убедить приложение продолжить отправку данных в спящем режиме или, по крайней мере, надежно проверить состояние соединения?