用Android 开发一个应用,其中想使用蓝牙来做数据交换。
先查了一下资料,感觉还算简单,于是就开始了一整天的痛苦历程。
基本上用discover之类的能够很快的发现对方的蓝牙设备,但是在
建立socket的时候,就出了一堆问题。刚开始,服务端用
adapter.listenUsingRfcommWithServiceRecord
加上某个UUID来监听,同时获得serverSocket,客户端用
serverDevice.createRfcommSocketToServiceRecord
来获取socket,然后就在 socket.connect的时候,出了很多
奇怪的错误。
最开始是 Service discovery failed ,
然后是 connection refused,
然后是 File descriptor in bad state
总之搜索了一下,确实千奇百怪的错误都有。后来看到有人用
Method m = serverDevice.getClass().getMethod( "createRfcommSocket", new Class[]{int.class});
BluetoothSocket socket = (BluetoothSocket) m.invoke( serverDevice, Integer.valueOf( 1));
据说能解决,尝试了一下,也是有时成功有时失败,极不稳定。
再后来,仔细考虑了一下,其实 createRfcommSocket 这个方法,指定连接的是 1号端口,
而服务端则还是用UUID来启动服务,至于其绑定了哪个端口,其实是不可知的。
最开始客户端用 createRfcommSocketToServiceRecord 这个方法,其实是利用UUID去找到
相应的服务,只不过不知道是不是我的UUID的问题,导致它找不到,所以报 service discovery failed这个错。
而直接用反射的方法去访问 1号端口,如果凑巧服务端也是在1号端口监听,那就没问题。如果不是,
并且没有服务在监听,就会报connection refused这个错。如果有别的服务在监听,然后又不理解
我的这个协议,就会报 File descriptor in bad state 这个错。
想明白了,解决起来也就容易。办法是在启动服务的时候,也用反射
Method listenMethod = btClass.getMethod("listenUsingRfcommOn", new Class[]{int.class});
BluetoothServerSocket returnValue = ( BluetoothServerSocket) listenMethod.invoke(btAdapter, new Object[]{ 29});
我在服务器和客户端都用29端口,然后就稳定下来了。
花了一整天的时间,真是无语。
分享到:
相关推荐
android 蓝牙SPP传输demo(代码),可以调用android蓝牙SPP数据,接口设置等
此demo实现了android ble4.0蓝牙跟设备的连接通讯功能,可以同时连接多台并且同时发送数据。
Android 蓝牙 A2DP播放AVDTP连接,音乐从audio到A2dp蓝牙侧,流程图。非常详细的从btif-bta-btm-hci 数据流程走向,以及从controller收到数据到btm层,将Android 源码使用流程图的形式画了出来,使Android 蓝牙...
Android 蓝牙BLE全面解析以及智能车锁开发实例一、蓝牙BLE产生背景——蓝牙的发展历程 二、蓝牙BLE的基本概念 三、蓝牙BLE的架构介绍 1. 蓝牙BLE架构概览 2. 简述BLE如何发送数据包 2.1 广播方式 2.2 连接方式 四、...
android蓝牙使用,弹出框选择,获取名字和地址
android蓝牙间传输demo
Android蓝牙开发客户端代码,必须配合服务器端进行操作,
Android 蓝牙服务发现SDP协议初始化、连接等源码流程图,非常详细的从btif-bta-btm-hci 数据流程走向,以及从controller收到数据到btm层,将Android 源码使用流程图的形式画了出来,使Android 蓝牙开发者更清楚数据...
Android 蓝牙map协议连接流程图(上层),将Android 源码使用流程图的形式画了出来,使Android 蓝牙开发者更清楚数据收发走向,代码流程更加形象生动,能够很快的熟悉Android 蓝牙源码,利于后面问题处理和BUG解决
android 蓝牙 耳机 开发
Android蓝牙通信聊天demo, Android蓝牙通信聊天demo Android蓝牙通信聊天demo
Android蓝牙2.0代码
我的博客“Android 蓝牙开发,蓝牙连打印机”有环境可运行截图。希望对大家有帮助,放心用吧。
android蓝牙通信(分为客户端,服务端) 因为最近需要做物联网这一块,就简单的搞了个demo实现客户端向服务端发送指令
Android 蓝牙PBAP协议连接流程图(java-framework层),将Android 源码使用流程图的形式画了出来,使Android 蓝牙开发者更清楚数据收发走向,代码流程更加形象生动,能够很快的熟悉Android 蓝牙源码,利于后面问题...
非常不错的安卓蓝牙程序,实现蓝牙聊天功能,对于初学安卓蓝牙的同学可以参考哦
Android蓝牙通信实例,有客户端和服务端两个程序,以便理解起来更加简单明了。
Android 蓝牙HFP 连接、SCO连接流程图(协议栈),非常详细的从btif-bta-btm-hci 数据流程走向,以及从controller收到数据到btm层,将Android 源码使用流程图的形式画了出来,使Android 蓝牙开发者更清楚数据收发...
该资源是Android连接蓝牙打印小票机打印的demo,需要该资源的可以看一下
Android利用蓝牙广播数据,用于不同设备间通讯,Android和可穿戴设备间通讯.