当前位置:   article > 正文

android蓝牙坑,记一次Android传统蓝牙建立连接的坑

android app传统蓝牙连接笔记本蓝牙以后, 如何断开连接 ?

说明与备忘

1、传统蓝牙指的是那些蓝牙4.0以前,蓝牙4.0及以后也叫低功耗蓝牙;传统蓝牙连接方式是无法和低功耗蓝牙模块建立通信通道的,因为通信的协议是不一样的。低功耗蓝牙是用GATT这种属性传输协议,而传统蓝牙则是通过Socket的方式进行数据的传输。

2、android 4.3(API 18)版本以下的对应的是传统蓝牙;android 4.3以上的是低功耗蓝牙;android 4.3至5.0版本的调用方法和android 5.0以上的调用方法也不一样;android蓝牙权限在6.0以上增加了一个模糊定位的权限,不开启部分手机无法发出扫描蓝牙的广播。

2、使用场景:Android App通过手机蓝牙去连接蓝牙设备,即App为主设备,蓝牙设备为从设备,或者说App为客户端,蓝牙设备为服务端;

2、蓝牙使用步骤:打开蓝牙——搜索设备——设备配对——连接设备——接收发送数据——断开连接关闭蓝牙。

3、在实际开发中,搜索设备和设备配对的步骤建议不放在App的蓝牙控制流程中,因为该步骤不稳定,很有很能搜索不到设备。App中只需要打开蓝牙并从已配对的设备中去连接设备,没有已配对的设备则提醒用户通过手机的蓝牙配对设备。这样个人感觉用户体验更好。

两个坑及解决办法

Android App和传统蓝牙建立Socket连接的两种方式:

1、通过反射调用BluetoothDevice的createRfcommSocket的方法:

BluetoothSocket socket = (BluetoothSocket) dev.getClass().getMethod("createRfcommSocket", new Class[]{int.class}).invoke(dev, 1);

该方式的坑在于连接不稳定,成功率较低;

2、通过UUID,代码如下:

String uuidValue = "00001101-0000-1000-8000-00805F9B34FB";

UUID mactekHartModemUuid = UUID.fromString(uuidValue);

BluetoothSocket socket = dev.createRfcommSocketToServiceRecord(mactekHartModemUuid);

该方式的坑在于必须使用Android的SSP(协议栈默认)的UUID:

00001101-0000-1000-8000-00805F9B34FB

才能正常和外部的,也是SSP串口的蓝牙设备去连接。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/956081
推荐阅读
相关标签
  

闽ICP备14008679号