【Android】 怎么设置蓝牙等待设备连接和接收数据

项目需求

1.打开蓝牙之后等待别的蓝牙设备进行连接。
2.连接之后等待别的设备发送数据,然后接收数据。
3.跟别的蓝牙设备断开连接值进入到等待状态,等待别的蓝牙设备连接。

解决方式
//非手机终端的UUID
public static final UUID SPP_UUID = UUID.fromString("00001101-0000-1000-8000-00805f9B34FB");
//手机终端的UUID
public static final UUID MOB_UUID = UUID.fromString("00001105-0000-1000-8000-00805f9B34FB");
    private BluetoothServerSocket mSSocket;
    private BluetoothSocket socket;



    /**
     * 监听客户端发起的连接
     */
    public void listen() {
        try {
            BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
            mSSocket = adapter.listenUsingRfcommWithServiceRecord(TAG, SPP_UUID); //加密传输,Android强制执行配对,弹窗显示配对码
//            mSSocket = adapter.listenUsingInsecureRfcommWithServiceRecord(TAG, MOB_UUID); //明文传输(不安全),无需配对

            // 开启子线程
            Util.EXECUTOR.execute(new Runnable() {
                @RequiresApi(api = Build.VERSION_CODES.KITKAT)
                @Override
                public void run() {
                    try {
                        socket = mSSocket.accept(); // 监听连接
//                        mSSocket.close(); // 关闭监听,只连接一个设备
                        loopRead(socket); // 循环读取
                    } catch (Throwable e) {
                        close();
                        //当设备连接之后,对面设备断开蓝牙连接之后会出现一个 return -1 的异常
                        listen();
                    }
                }
            });
        } catch (Throwable e) {
            close();
        }
    }

    public void close() {
        super.close();
        try {
            if (socket != null) {
                socket.close();
            }

            if (mSSocket != null) {
                mSSocket.close();
            }

        } catch (Throwable e) {
            e.printStackTrace();
        }
    }

    private BluetoothSocket mSocket;
    private DataOutputStream mOut;




 /**
     * 循环读取对方数据(若没有数据,则阻塞等待)
     */
    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    void loopRead(BluetoothSocket socket) throws IOException {
        mSocket = socket;
        try {
            if (!mSocket.isConnected())
                mSocket.connect();
            mOut = new DataOutputStream(mSocket.getOutputStream());
            try (DataInputStream in = new DataInputStream(mSocket.getInputStream())) {
                byte[] buffer = new byte[1024];
                int bytesRead;
                while (true) {
                    bytesRead = in.read(buffer);
                    if (bytesRead == -1) {
                        Log.e("test", "buff length: " + bytesRead);
                    } else {
                        byte[] data = new byte[bytesRead];
                        System.arraycopy(buffer, 0, data, 0, bytesRead);
                        String textData = new String(data);
                        Log.i("test", "Received data: " + textData);
                    }
                }
            }
        } catch (IOException e) {
            close();
            Log.e("test", "error io:" + e.getMessage());
            throw e; // 将捕获到的异常抛出
        }
    }

相关推荐

  1. Android如何获取设备连接状态

    2024-06-06 22:04:07       35 阅读
  2. android 开关设置

    2024-06-06 22:04:07       57 阅读
  3. uniapp小程序连接设备

    2024-06-06 22:04:07       21 阅读
  4. uniapp微信小程序连接设备数据对接

    2024-06-06 22:04:07       29 阅读
  5. 【微信小程序】连接设备

    2024-06-06 22:04:07       32 阅读
  6. 实现Android设备之间的自动配对

    2024-06-06 22:04:07       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-06 22:04:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-06 22:04:07       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-06 22:04:07       82 阅读
  4. Python语言-面向对象

    2024-06-06 22:04:07       91 阅读

热门阅读

  1. C++ 智能指针

    2024-06-06 22:04:07       34 阅读
  2. Docker命令大全

    2024-06-06 22:04:07       28 阅读
  3. WPS超级会员4年,2024年到手值得!

    2024-06-06 22:04:07       109 阅读
  4. 【python】匿名函数

    2024-06-06 22:04:07       30 阅读
  5. 东方博宜1542 - 小X算排名

    2024-06-06 22:04:07       25 阅读
  6. CSS中绝对定位和百分比问题(CSS中的小细节)

    2024-06-06 22:04:07       30 阅读
  7. CSS变量 -- var() 使用教程

    2024-06-06 22:04:07       23 阅读
  8. CSS简述(1)

    2024-06-06 22:04:07       23 阅读
  9. 9. 媒体查询与响应式设计

    2024-06-06 22:04:07       29 阅读
  10. 网络安全中攻击溯源方法

    2024-06-06 22:04:07       27 阅读