read failed return -1
蓝牙连接中最关键的一步connect最容易出问题。这里面有几个坑,
0Android studio 模拟器没有蓝牙 因此会报adapter 不存在, 换成实机调试即可
1connect必须放到单独的线程进行
2获取socket的方式有多种,这也是问题的一个原因。可以先根据sdk版本选择insecureRfcomm还是Rfcomm,try connect 如果失败再使用反射机制进行连接。反射机制连接也有带 UUID的和不带UUID的。
我最后的代码里面实现的时候就是不断地try connect。一种方法不行就换下一种。最后使用了不带UUID的反射机制完成了100%连接。
3如果结果不对,连接不上,请调试的时候先检查device socket是否为null
4先在手机上打开蓝牙 手动点设备配对。配对完成后再在app中connect。
5注意使用的变量的生命周期 可能存在bug。