You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Flutter中使用flutter_bluetooth_serial包建立蓝牙连接时遭遇PlatformException异常求助

Flutter中使用flutter_bluetooth_serial包建立蓝牙连接时遭遇PlatformException异常求助

我目前正在开发一个使用flutter_bluetooth_serial包建立蓝牙连接的Flutter应用,在尝试连接另一台蓝牙设备时,遇到了以下异常:

PlatformException(connect_error, read failed, socket might closed or timeout, read ret: -1, java.io.IOException: read failed, socket might closed or timeout, read ret: -1)

嗨,我之前也踩过这个坑,折腾了好一阵子才找到解决方向,给你分享几个亲测有效的排查和解决思路:

  • 先确认设备配对状态
    很多时候这个错误是因为设备配对不彻底或者配对信息失效导致的。你可以先去手机系统的蓝牙设置里取消和目标设备的配对,重启一下蓝牙,重新配对后再尝试连接,大概率能解决问题。

  • 检查连接参数是否正确
    有些蓝牙设备需要指定特定的服务UUID或者端口才能建立连接,你可以查一下目标设备的蓝牙文档,看看是否需要在连接时传入对应的参数。比如调用连接方法时可以指定serviceId

    BluetoothConnection.toAddress(deviceAddress, serviceId: "你的服务UUID")
    

    另外也可以试试调整连接超时时间,或者增加连接重试的次数,避免因为超时触发这个错误。

  • 确保权限配置到位
    尤其是Android 12及以上的系统,蓝牙连接需要BLUETOOTH_CONNECTBLUETOOTH_SCAN权限,部分设备还需要位置权限才能正常扫描和连接蓝牙。你要在AndroidManifest.xml里添加对应的权限声明,并且在应用运行时主动请求这些权限,别漏了!

  • 排查设备兼容性和信号问题
    你可以先用其他手机试试连接目标蓝牙设备,看看是否能成功,排除设备本身的故障。另外尽量让两个设备靠近一些,蓝牙信号弱也容易导致连接超时或者断开,出现这类错误。

  • 深挖日志找线索
    你可以在代码里多加点日志,打印连接过程中的设备信息、状态变化;也可以用adb logcat查看Android原生的日志输出,里面往往会有更详细的错误细节,能帮你更快定位问题根源。

备注:内容来源于stack exchange,提问作者Abhishek Kulkarni

火山引擎 最新活动