/BLESerial

Android 蓝牙串口 SPP 工具类 + Demo

Primary LanguageJava

蓝牙工具类:BLESPPUtils.java 直达链接

调用示例:MainActivity.java 直达链接

配套讲解文章:快速上手 Android 蓝牙串口 SPP 开发 直达链接

使用方式:

  • 1 加入权限并确认处理好运行时权限,已经授予了定位权限(用于扫描蓝牙设备)

    <!--管理蓝牙需要-->
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <!--搜索蓝牙需要,因为蓝牙可以被用来定位,所以需要定位权限-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
  • 2 实例化工具类,第一个参数是 context,可以为任意 context,不涉及 UI 操作;第二个参数是「蓝牙活动回调」

    // 初始化
    mBLESPPUtils = new BLESPPUtils(MainActivity.this, new BLESPPUtils.OnBluetoothAction() {
        /**
         * 当发现新设备
         *
         * @param device 设备
         */
        @Override
        public void onFoundDevice(BluetoothDevice device) {
            
        }
    
        /**
         * 当连接成功
         *
         * @param device
         */
        @Override
        public void onConnectSuccess(BluetoothDevice device) {
    
        }
    
        /**
         * 当连接失败
         *
         * @param msg 失败信息
         */
        @Override
        public void onConnectFailed(String msg) {
    
        }
    
        /**
         * 当接收到 byte 数组
         *
         * @param bytes 内容
         */
        @Override
        public void onReceiveBytes(byte[] bytes) {
    
        }
    
        /**
         * 当调用接口发送了 byte 数组
         *
         * @param bytes 内容
         */
        @Override
        public void onSendBytes(byte[] bytes) {
    
        }
    
        /**
         * 当结束搜索设备
         */
        @Override
        public void onFinishFoundDevice() {
    
        }
    });
  • 3 设置接收停止标志位字符串

    mBLESPPUtils.setStopString("\r\n");
  • 4 启用工具类

    mBLESPPUtils.onCreate();
  • 5 在适当的时候销毁工具类,譬如 Activity 的 onDestroy()

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mBLESPPUtils.onDestroy();
    }
  • 6 检查蓝牙开启情况

    // 用户没有开启蓝牙的话打开蓝牙
    if (!mBLESPPUtils.isBluetoothEnable()) mBLESPPUtils.enableBluetooth();
  • 7 搜索蓝牙设备,搜索结果在上面的回调里了

    mBLESPPUtils.startDiscovery();
  • 8 使用搜索到的 BluetoothDevice 连接设备

    mBLESPPUtils.connect(bluetoothDevice);
  • 9 使用之前保存的 MAC 地址连接

    mBLESPPUtils.connect("mac地址");
  • 10 发送 byte 数组到串口

    mBLESPPUtils.send("hello\r\n".getBytes());
  • 11 接收到串口发送的 byte 数组在上面第二步的onReceiveBytes(byte[] bytes)回调中

  • 12 启用工具类日志输出

    mBLESPPUtils.enableBluetooth();