蓝牙连接但不发送数据

qyyhg6bp  于 2021-07-11  发布在  Java
关注(0)|答案(0)|浏览(650)

我正在做一个将我的安卓手机连接到arduino蓝牙收发器的项目。它工作正常,直到手机进入暂停(睡眠?)模式;当这种情况发生时,我建立的蓝牙连接似乎仍然存在,但没有数据传输。我用的是androidsdk30。
下面是我要做的:我有一个用户界面列表,上面有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秒发送一次数据,在接收端点亮一个led灯,直到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);
}

现在当手机进入睡眠状态(即按一次电源按钮)时,led在60秒后熄灭,即没有收到任何数据。然而,连接本身似乎仍在建立(我可以通过接收器led闪烁的方式来判断)。
当我唤醒设备时,它不会继续发送数据。我的应用程序中的“断开连接”按钮不起作用( bluetoothSocket.close() ),再次尝试连接到设备也不会成功。我必须关闭这个应用程序,然后才能断开连接。
我正在使用的连接是否仍然有效的检查是 bluetoothSocket != null && bluetoothSocket.isConnected() .
我确实将我的应用程序添加到了android设置中的“不要进入待机状态”。
那么,我怎样才能说服应用程序在睡眠模式下继续发送数据,或者至少可靠地检查连接状态呢?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题