android 蓝牙的那些坑

来源:互联网 发布:mac 编译安装php fpm 编辑:程序博客网 时间:2024/06/05 06:53

本来想开发一款蓝牙软件,因为网上已经有各种教程,所以本来是没必要继续开一编文章来说些什么的,但是亲自体验过后发现,实际上Android与Android之间的蓝牙通讯实在有不少坑,唯有自己总结一下并记录下来

//采用端口进行链接,这里值得注意的是,网上基本上第二个参数都表示1,其实这个数值可以是1-30,表示通过1-30之间的某个端口来进行连接

Device.getClass().getMethod("createRfcommSocket", new Class[]{int.class}); method.invoke(device, 1);

如果手机之间通过蓝牙通信,那么必须服务器先以UUID来创建,客户端才可以用createRfcommSocketToServiceRecord…..UUID来链接获得socket,否则永远timeout,除非使用上述的端口连接,既然使用蓝牙端口连接,那么同样的道理服务端也应使用端口创建
常用的服务器名:bpssp

手机作为服务器的话,soctet.getInputStream()会累积所有未接收的数据流缓存

蓝牙多机链接的话,允许6-8台机器对服务器进行连接,此时服务器应存在一条线程专门负责接收其他机器的链接信息,另一条线程负责处理对应机器的业务

class OtherServer implements Runnable {        @Override        public void run() {            try {                createLog("createing server");                bluetoothAdapter =     BluetoothAdapter.getDefaultAdapter();                serverSoctet = bluetoothAdapter.listenUsingRfcommWithServiceRecord("btspp", UUID.fromString(uuid));                while (true) {                    createLog("waiting connection");                    BluetoothSocket soctet = serverSoctet.accept();                    new Thread(new ServerThread(soctet)).start();                }            } catch (Exception e) {            }        }    }

亲测4.0的蓝牙传输距离在无障碍的环境下,可以达到数十米

0 0
原创粉丝点击