门禁通蓝牙开发包使用说明书v1.3

2017-10-23  本文已影响75人  苏简笔记

集成

本SDK不包含任何其他第三方代码,只是对原生的蓝牙相关代码进行了封装,以及封装了相关的业务。集成的时候只需要将zhy-ble.jar直接导入到项目里面即可使用。

SDK使用说明

  1. 本SDK仅支持Ble蓝牙进行操作,故使用前应该判断当前设备是否支持ble,再进行后续操作。本Sdk简化了蓝牙的搜索连接操作,以及内部封装的相关操作api仅针对本公司指定产品有效。

  2. 使用蓝牙功能,必须先声明蓝牙相关的权限。Android 6.0以上的系统,需要额外申请位置相关的权限,并且是危险权限建议在运行时动态获取。本SDK并不包含权限相关的操作,使用者根据程序的实际情况自行处理。

  3. BLE的MTU(最大传输单元)是20字节,即一次最多能发送20个字节,若超过20个字节,本SDK不做处理,本SDK涉及的相关业务场景中并不会出现此种情况,上层传输数据的时候需要注意。

  4. 连接过程的相关状态回调都在BleListener类中,使用者可按需重写相关的方法。使用中应该实现BleListener和BleOperationListener,SDK中的相关操作的重要回调都会通过此两个对象回调回去。

  5. 受限于系统关系,调用了bleManager.close()方法关闭链接,硬件跟蓝牙设备有时候并不会马上断开,会有一定时间的延迟。所以当设备断开或者连接超时之后,想要重连的话建议先扫描看看能否扫描到这个设备,可以扫描到的话再去连接。本SDK有提供相关方法。如果扫描到目标设备就停止扫描并且自动去连接设备。

  6. 使用Ble功能前同样应该判断当前设备是否有打开蓝牙,如果没有打开应该让用户打开,再执行后续的操作。

基本功能集成使用

蓝牙使用操作类_BleManager

Android原生的Ble相关api使用起来相对来说比较麻烦,本SDK对ble设备的扫描跟连接做了简化处理,开发者可以实例化BleManager,然后使用这个类提供的api进行相关的逻辑操作。

蓝牙门禁初始化操作:

       //首先初始化BleManager
        try {
            bleManager = new BleManager(getActivity());
        } catch (Exception e) {
            toast("当前系统不支持BLE操作");
        }

        //蓝牙扫描相关操作设置
        //设置扫描时间,默认10s
        bleManager.setScanPeriod(10 * 1000);
        //设置连接超时时间,默认20s
        bleManager.setConnectTimeOut(15 * 1000);
        //设置扫描|连接相关的回调监听
        bleManager.setBleListener(new BleListener());
        //设置蓝牙相关操作监听
        bleManager.setOperationListener(new OperationListener());
        //设置异常操作处理类
         bleManager.setExceptionHandler(mCustomBleExceptionHandler);

        if (!bleManager.isBleEnable()) {
            Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            mActivity.startActivityForResult(intent, ENABLE_BLE_CODE);
        } else {
            //todo 具体的业务逻辑
        }

实例化BleManager之后,扫描 & 连接设备api如下

//扫描设备
bleManager.scan();
//连接设备
connect(BluetoothDevice bean);
//扫描并且连接到目标设备,建议使用此类
scanDeviceAndConnect(BleBean bean)
//扫描设备,根据目标设备的名字连接设备
scanDeviceAndConnect(String deviceName)

//note:扫描跟连接设备所有的状态都会通过BleListener中的方法回调回来。使用者根据需要重写相关的方法。

BleListener的相关说明如下:

//注意1:使用者需要密切关注蓝牙的连接状态
//注意2:此类设计成抽象类,使用者根据需要自行重写对应的类
public abstract class BleListener {
  
    /** 如果蓝牙未打开会回调此方法*/
    public void onBluetoothDisable() {}

    /** 开始搜索设备*/
    public void onScanStarted() {}

    /**搜索设备结束*/
    public void onScanFinished() {}

    /** 发现设备*/
    public void onDevicesFound(BleBean bleBean) { }

    /**正在连接某个设备*/
    public void onConnecting() {}

    /**成功连接上某个设备设备*/
    public void onConnected(BluetoothDevice device) {}

    /** 设备已断开*/
    public void onDisconnected() { }

    /**表示设备已经设置完通知,可以进行其他操作*/
    public void onReady() {}
}

使用门禁的相关功能

门禁的相关功能在SDK内部都已经封装好。连接上设备之后会自动去获取设备的相关信息,所以必须在 onInitialFinish(String deviceName)方法之后再去做后续的操作。
具体看使用说明:

开门
bleManager.openDoor()
下发一张卡数据
bleManager.downLoadCard(CardBean);

开始上传开门记录,请求开始上传开门记录之后,设备就会一条条上传开门记录,上传成功一条,告诉设备上传成功了,就会开始下一跳记录的上传
bleManager.startUploadRecord();
停止上传开门记录
bleManager.stopUploadRecord();
响应上传开门记录成功,继续上传下一条记录
bleManager.upLoadRecordSuccess();

BleOperationListener 的相关说明如下:

//注意1:门禁相关的所有操作都需要在onInitialFinish()方法回调之后再调用
//注意2:此类设计成抽象类,使用者根据需要自行重写对应的类
public abstract class BleOperationListener {

         /** 设备初始化完成,deviceName是设备的名字,在这个回调后再去做后续的操作**/
        public void onInitialFinish(String deviceName) {}

         /** 下发卡数据成功**/
        public void onDownLoadCardSuccess(CardBean bean) {}

          /** 上传一条开门记录**/
        public void upLoadRecord(RecordBean bean) {}

          /**开门记录上传记录监听,totalCount为全部需要上传的记录,curCount为当前已上传进度**/
        public void onUploadRecordProgress(int totalCount, int curCount) {}

        /** 蓝牙已经上传完所有的开门记录,蓝牙会自动断开。可以在这个回调里面去处理后续的操作**/
        public void onFinishUploadRecord() {}
    
        /** 正在开门回调**/
        public void isOpeningDoor() {}

         /** 开门结果回调 result -true表示开门成功,false表示开门失败。tip为开门结果提示**/
        public void openDoorResult(boolean result, String tip) { }     

其他相关api说明如下

BleManager相关api:

    //查看当前蓝牙状态
    isBleEnable()
   //关闭连接,退出的时候应当调用
   close()
   //手动停止扫描
   cancelScan()
   //查看当前设备是否支持Ble
   isSupportBle(Context context);

BleLog相关api:

  //设置是否打印日志,默认不打印
  BleLog.setPrintEnable(true);

如果有不清楚的,请随时向开发人员提问(工作QQ:740074547)

上一篇下一篇

猜你喜欢

热点阅读