关于android蓝牙通信的问题

最近同学要做一个手机与蓝牙模块的通信的毕业设计,让我帮忙写一个手机端的应用,匆匆的找了些资料,总算是能勉强实现通信,总结一些关键的步骤:

首先,android蓝牙通信步骤:

1:打开蓝牙

2:搜索蓝牙设备

3:选择设备进行配对(连接前必须先配对)

4:对配对好的设备建立socket

5:获取输入输出流

6:对流进行操作

从第一步到第二步有api可以很好的实现功能,不过第三步对设备进行配对没有现成的api调用,可以利用反射机制得到隐藏的方法关键代码

 Method createBondMethod = btClass.getMethod("createBond");  
 Boolean returnValue = (Boolean) createBondMethod.invoke(btDevice);
对于配对设备,可以让系统自己实现配对,在socket连接时如果没有配对系统会询问是否配对

接下来的socket通信是关键步骤

对于客户端的socket:通过BluetoothDevice实例的createRfcommSocketToServiceRecord方法可以返回一个带有UUID的BluetoothSocket实例

其中UUID:UUID含义是通用唯一识别码 (Universally Unique Identifier),网上说可以随便自己生成,Java中有一个UUID.randomUUID()方法自己生成

可是好像不好用,还是用android的SSP(协议栈默认)的UUID:00001101-0000-1000-8000-00805F9B34FB 

还有一种流程:

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

socket建立后再调用socket.connect()方法,如果连接成功就可以用socket得到输入输入流。

可是问题来了,每次往流里写完数据后就会报一个socket close 异常,下次写数据就会出错,没办法,在下次往流里写数据时用socket.isConnected()

判断一下,如果是false,就重新获取一个socket

socket = device.createRfcommSocketToServiceRecord(UUID.fromString(uuid));
socket.connect();
总感觉这样写有问题,先能运行再说

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值