Android 蓝牙通信开发(三) 蓝牙通信

蓝牙通信是我们日常生活中比较方便的一种通信技术,Android从2.0版本的SDK就开始支持蓝牙。对开发人员来说,应用程序中蓝牙还是一种用来创建点对点连接通信的简单而高效的方式。

蓝牙通信功能的实现的基本流程大致分为蓝牙设备搜索蓝牙设备连接和蓝牙通信三个阶段,之前我们已经学习了前面两个阶段,今天把最后的蓝牙通信搞定!

Android模拟器还不支持蓝牙,因此要测试使用蓝牙功能,必须使用至少两台Android设备。

(1)基于I/O流的蓝牙通信

当两台蓝牙设备建立好连接之后,就可以进行数据传输了。蓝牙通信的数据传输方式是通过流形式进行的。而要获取传输流,就要使用到BluetoothSocket:BluetoothSocket.getInptuStream()[获取输入流]、BluetoothSocket.getOutputStream()[获取输出流]。

  • 写出数据(OutputStream)
private static final UUID UUID_CLIENT = UUID.fromString("2b21619a-e2d4-4108-aab5-b64c48906552");

BluetoothDevice device;     //连接的蓝牙设备
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(UUID_CLIENT);
socket.connect();   //线程阻塞
OutputStream writer = socket.getOutputStream();     //获取蓝牙连接输出流
writer.write(("***").getBytes());   //发送"***"到服务器
  • 读入数据(InptuStream)
private static final UUID UUID_SERVER = UUID.fromString("2b21619a-e2d4-4108-aab5-b64c48906552");
private BluetoothAdapter bAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {

    //...

    bAdapter = BluetoothAdapter.getDefaultAdapter();

    new ServerStart().start();  //开启蓝牙服务器
}

class ServerStart extends Thread {

        @Override
        public void run() {
            try {
                BluetoothServerSocket serverSocket = bAdapter.listenUsingRfcommWithServiceRecord("Server", UUID_SERVER);

                //服务器打开成功
                //...

                while (true) {
                    BluetoothSocket socket = serverSocket.accept();      //服务器等待客户端访问,线程阻塞

                    //客户端接入访问成功
                    //...

                    new ServerReceive(socket).start();          //进行蓝牙通信
                }

            } catch (Exception e) {

            }
        }
    }

class ServerReceive extends Thread {

    BluetoothSocket socket;

    public ServerReceive(BluetoothSocket s) {
        socket = s;
    }

    @Override
    public void run() {
        try {
            InputStream reader = socket.getInputStream();
            byte[] buffer = new byte[1024];
            while (true) {
                int n = reader.read(buffer);        //监听输入流
                //客户端发送数据
                if(n != -1) {
                    byte[] text = new byte[n];
                    for (int i = 0; i < n; i ++) {
                        text[i] = buffer[i];
                    }
                    String s = new String(text);    //接收到的数据

                    //判断断开条件,断开连接
                    if (***) {
                        socket.close();
                        break;
                    }
                }
            }
        } catch (Exception e) {

        }

    }
}

(2)运行结果

客户端和服务器端连接

服务器端接收到来自不同客户端的数据

客户端断开连接


BluetoothDemo下载

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值