我正在做一个将我的安卓手机连接到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设置中的“不要进入待机状态”。
那么,我怎样才能说服应用程序在睡眠模式下继续发送数据,或者至少可靠地检查连接状态呢?
暂无答案!
目前还没有任何答案,快来回答吧!