集成
本SDK不包含任何其他第三方代码,只是对原生的蓝牙相关代码进行了封装,以及封装了相关的业务。集成的时候只需要将zhy-ble.jar直接导入到项目里面即可使用。
SDK使用说明
-
本SDK仅支持Ble蓝牙进行操作,故使用前应该判断当前设备是否支持ble,再进行后续操作。本Sdk简化了蓝牙的搜索连接操作,以及内部封装的相关操作api仅针对本公司指定产品有效。
-
使用蓝牙功能,必须先声明蓝牙相关的权限。Android 6.0以上的系统,需要额外申请位置相关的权限,并且是危险权限建议在运行时动态获取。本SDK并不包含权限相关的操作,使用者根据程序的实际情况自行处理。
-
BLE的MTU(最大传输单元)是20字节,即一次最多能发送20个字节,若超过20个字节,本SDK不做处理,本SDK涉及的相关业务场景中并不会出现此种情况,上层传输数据的时候需要注意。
-
连接过程的相关状态回调都在BleListener类中,使用者可按需重写相关的方法。使用中应该实现BleListener和BleOperationListener,SDK中的相关操作的重要回调都会通过此两个对象回调回去。
-
受限于系统关系,调用了bleManager.close()方法关闭链接,硬件跟蓝牙设备有时候并不会马上断开,会有一定时间的延迟。所以当设备断开或者连接超时之后,想要重连的话建议先扫描看看能否扫描到这个设备,可以扫描到的话再去连接。本SDK有提供相关方法。如果扫描到目标设备就停止扫描并且自动去连接设备。
-
使用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)
网友评论