Android蓝牙BLE开发,向设备发送简单数据

1 篇文章 0 订阅
2 篇文章 0 订阅

用的是git上的蓝牙管理库,首先添加依赖:

implementation'com.clj.fastble:FastBleLib:2.3.4'  //蓝牙管理库
implementation 'com.yanzhenjie:permission:2.0.3'  //6.0+权限管理

一般给蓝牙发数据是嵌入式开发的哥们写好固定的某个UID,这个UID其实是一对的,

分别是uuid_service,其对应的特征值characteristic uuid

然后我们向这对UID发送数据,上代码:

private BleDevice mBleDevice;

private void startInit() {
        if (BleManager.getInstance().isBlueEnable()) {
            scan();
        } else {
            //自己处理没开启的逻辑
            BleManager.getInstance().enableBluetooth();
        }
}


private void scan() {
        AndPermission.with(this)
                .runtime()
                .permission(Permission.ACCESS_FINE_LOCATION)
                .onGranted(new Action<List<String>>() {
                    @Override
                    public void onAction(List<String> data) {
                                        scanLast();
                                    }

                                    @Override
                                    public void onCancel() {

                                    }
                                });
                    }
                })
                .onDenied(new Action<List<String>>() {
                    @Override
                    public void onAction(List<String> data) {
                        ToastUtil.showSingleToast("无权限,请开启权限");
                    }
                }).start();
    }


private void scanLast() {
        BleManager.getInstance().scan(new BleScanCallback() {
            @Override
            public void onScanFinished(List<BleDevice> scanResultList) {
                //这里就能看到所有扫描到的设备
                System.out.println("onScanFinished---:");
            }

            @Override
            public void onScanStarted(boolean success) {

            }

            @Override
            public void onScanning(BleDevice bleDevice) {
                System.out.println("onScanning---name:" + bleDevice.getName() + "----------mac:" + bleDevice.getMac());
                //这里是自己的逻辑,扫描到指定的mac,开始连接
                if (bleDevice.getMac().equals("11:22:33:44:55:66")) {
                    mBleDevice = bleDevice;
                    connectBle();
                }
            }
        });
    }

private void connectBle() {
        BleManager.getInstance().connect(mBleDevice, new BleGattCallback() {
            @Override
            public void onStartConnect() {
                
            }

            @Override
            public void onConnectFail(BleDevice bleDevice, BleException exception) {
                
                mTvState.setText("连接设备失败,请重试一次...");
            }

            @Override
            public void onConnectSuccess(BleDevice bleDevice, BluetoothGatt gatt, int status) {
                
                mTvState.setText("蓝牙连接成功");
                //这里进行遍历,就可以看到每个UUID对的值
                //BluetoothGatt gatt2 = BleManager.getInstance().getBluetoothGatt(bleDevice);
                /*List<BluetoothGattService> serviceList = gatt.getServices();
                for (BluetoothGattService service : serviceList) {
                    UUID uuid_service = service.getUuid();
                    System.out.println("uuid_service----:" + uuid_service.toString());
                    List<BluetoothGattCharacteristic> characteristicList = service.getCharacteristics();
                    for (BluetoothGattCharacteristic characteristic : characteristicList) {
                        UUID uuid_chara = characteristic.getUuid();
                        System.out.println("uuid_chara----:" + uuid_chara.toString());
                    }
                }*/
            }

            @Override
            public void onDisConnected(boolean isActiveDisConnected, BleDevice device, BluetoothGatt gatt, int status) {

            }
        });
    }

//然后就是向连接的设备发送数据
private void openVoice() {
        //比如要向设备发送一串16进制的数据,将十六进制转换成byte数组,然后写入数据
        byte[] bytes = hexToByteArray("302132323212");    
        BleManager.getInstance().write(mBleDevice, "0000c010-0000-1000-8000-008032345533", "00000001-0000-1000-8000-008023456789", bytes, new BleWriteCallback() {
                    @Override
                    public void onWriteSuccess(int current, int total, byte[] justWrite) {
                       //发送成功
                    }

                    @Override
                    public void onWriteFailure(BleException exception) {
                        //发送失败
                    }
                }
        );
    }

    //字符串转byte数组
    public byte[] hexToByteArray(String inHex) {
        int hexlen = inHex.length();
        byte[] result;
        if (hexlen % 2 == 1) {
            //奇数
            hexlen++;
            result = new byte[(hexlen / 2)];
            inHex = "0" + inHex;
        } else {
            //偶数
            result = new byte[(hexlen / 2)];
        }
        int j = 0;
        for (int i = 0; i < hexlen; i += 2) {
            result[j] = hexToByte(inHex.substring(i, i + 2));
            j++;
        }
        return result;
    }

    public byte hexToByte(String inHex) {
        return (byte) Integer.parseInt(inHex, 16);
    }

//最后断开
    @Override
    protected void onDestroy() {
        super.onDestroy();
        try {
            BleManager.getInstance().disconnect(mBleDevice);
            BleManager.getInstance().cancelScan();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

 

 

  • 0
    点赞
  • 4
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

那一刻-逐风

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值