我有一个在三星 Galaxy S 手机上运行的 Android 应用程序。该应用程序通过蓝牙从设备收集传感器数据。在大多数情况下,没有数据被发送/接收。我已经设置了我的应用程序,以便它与蓝牙设备“自动重新连接”,以防连接“丢失”。
我观察到,在我的应用程序运行大约 1.5 小时后,手机失去了与蓝牙设备的连接,并且自动重新连接失败。
从设备向手机发送传感器数据是“关键任务”。如何确保连接不丢失。解决方案必须是最优的。也就是说,为了节省电池,手机需要能够睡眠/休眠。
我有一个在三星 Galaxy S 手机上运行的 Android 应用程序。该应用程序通过蓝牙从设备收集传感器数据。在大多数情况下,没有数据被发送/接收。我已经设置了我的应用程序,以便它与蓝牙设备“自动重新连接”,以防连接“丢失”。
我观察到,在我的应用程序运行大约 1.5 小时后,手机失去了与蓝牙设备的连接,并且自动重新连接失败。
从设备向手机发送传感器数据是“关键任务”。如何确保连接不丢失。解决方案必须是最优的。也就是说,为了节省电池,手机需要能够睡眠/休眠。
您应该只在断开连接时侦听传入连接(使用 BluetoothServerSocket)。它应该在前台服务中运行,永远不会停止。该服务将监控蓝牙连接状态(断开连接、监听、连接)和每种情况下的垃圾邮件线程(ASyncTasks)。
监听线程应该完全按照Android 文档中的说明进行操作:
要创建准备好接收传入连接的侦听 BluetoothServerSocket,请使用 BluetoothAdapter.listenUsingRfcommWithServiceRecord()。然后调用accept() 来监听传入的连接请求。
为了进一步节省电池电量,用户可以关闭蓝牙 - 这将杀死您的监听线程,但不会杀死整个服务(进入断开状态)。当用户重新打开蓝牙时,您的服务应该注意到更改并重新启动侦听线程。
我的一个朋友也有类似的问题,他现在使用安卓应用程序“ BluetoothKeepalive ”来避免连接丢失