-
Notifications
You must be signed in to change notification settings - Fork 1.2k
扫描及连接
Lijian edited this page May 19, 2018
·
3 revisions
`void initScanRule(BleScanRuleConfig scanRuleConfig)`
BleScanRuleConfig scanRuleConfig = new BleScanRuleConfig.Builder()
.setServiceUuids(serviceUuids) // 只扫描指定的服务的设备,可选
.setDeviceName(true, names) // 只扫描指定广播名的设备,可选
.setDeviceMac(mac) // 只扫描指定mac的设备,可选
.setAutoConnect(isAutoConnect) // 连接时的autoConnect参数,可选,默认false
.setScanTimeOut(10000) // 扫描超时时间,可选,默认10秒;小于等于0表示不限制扫描时间
.build();
BleManager.getInstance().initScanRule(scanRuleConfig);
Tips:
- 在扫描设备之前,可以配置扫描规则,筛选出与程序匹配的设备
- 不配置的话均为默认参数
- 在2.1.2版本及之前,必须先配置过滤规则再扫描;在2.1.3版本之后可以无需配置,开启默认过滤规则的扫描。
`void scan(BleScanCallback callback)`
BleManager.getInstance().scan(new BleScanCallback() {
@Override
public void onScanStarted(boolean success) {
// 开始扫描(主线程)
}
@Override
public void onScanning(BleDevice bleDevice) {
// 扫描到一个符合扫描规则的BLE设备(主线程)
}
@Override
public void onScanFinished(List<BleDevice> scanResultList) {
// 扫描结束,列出所有扫描到的符合扫描规则的BLE设备(主线程)
}
});
Tips:
- 扫描及过滤过程是在工作线程中进行,所以不会影响主线程的UI操作,最终每一个回调结果都会回到主线程。
通过扫描到的BleDevice对象进行连接。
`BluetoothGatt connect(BleDevice bleDevice, BleGattCallback bleGattCallback)`
BleManager.getInstance().connect(bleDevice, new BleGattCallback() {
@Override
public void onStartConnect() {
// 开始连接
}
@Override
public void onConnectFail(BleDevice bleDevice, BleException exception) {
// 连接失败
}
@Override
public void onConnectSuccess(BleDevice bleDevice, BluetoothGatt gatt, int status) {
// 连接成功,BleDevice即为所连接的BLE设备
}
@Override
public void onDisConnected(boolean isActiveDisConnected, BleDevice bleDevice, BluetoothGatt gatt, int status) {
// 连接中断,isActiveDisConnected表示是否是主动调用了断开连接方法
}
});
Tips:
- 在某些型号手机上,connectGatt必须在主线程才能有效。非常建议把连接过程放在主线程。
- 连接失败后重连:框架中包含连接失败后的重连机制,可以配置重连次数和时间间隔。当然也可以自行在`onConnectFail`回调方法中延时调用`connect`方法。
- 连接断开后重连:可以在`onDisConnected`回调方法中再次调用`connect`方法。
- 为保证重连成功率,建议断开后间隔一段时间之后进行重连。
- 某些机型上连接失败后会短暂地无法扫描到设备,可以通过设备对象或设备mac直连,而不经过扫描。
通过已知设备Mac直接
`BluetoothGatt connect(String mac, BleGattCallback bleGattCallback)`
BleManager.getInstance().connect(mac, new BleGattCallback() {
@Override
public void onStartConnect() {
// 开始连接
}
@Override
public void onConnectFail(BleDevice bleDevice, BleException exception) {
// 连接失败
}
@Override
public void onConnectSuccess(BleDevice bleDevice, BluetoothGatt gatt, int status) {
// 连接成功,BleDevice即为所连接的BLE设备
}
@Override
public void onDisConnected(boolean isActiveDisConnected, BleDevice bleDevice, BluetoothGatt gatt, int status) {
// 连接中断,isActiveDisConnected表示是否是主动调用了断开连接方法
}
});
Tips:
- 此方法可以不经过扫描,尝试直接连接周围复合该Mac的BLE设备。
- 在很多使用场景,我建议APP保存用户惯用设备的Mac,然后使用该方法进行连接可以大大提高连接效率。
扫描到首个符合扫描规则的设备后,便停止扫描,然后连接该设备。
`void scanAndConnect(BleScanAndConnectCallback callback)`
BleManager.getInstance().scanAndConnect(new BleScanAndConnectCallback() {
@Override
public void onScanStarted(boolean success) {
// 开始扫描(主线程)
}
@Override
public void onScanFinished(BleDevice scanResult) {
// 扫描结束,结果即为扫描到的第一个符合扫描规则的BLE设备,如果为空表示未搜索到(主线程)
}
@Override
public void onStartConnect() {
// 开始连接(主线程)
}
@Override
public void onConnectFail(BleDevice bleDevice,BleException exception) {
// 连接失败(主线程)
}
@Override
public void onConnectSuccess(BleDevice bleDevice, BluetoothGatt gatt, int status) {
// 连接成功,BleDevice即为所连接的BLE设备(主线程)
}
@Override
public void onDisConnected(boolean isActiveDisConnected, BleDevice device, BluetoothGatt gatt, int status) {
// 连接断开,isActiveDisConnected是主动断开还是被动断开(主线程)
}
});
Tips:
- 扫描及过滤过程是在工作线程中进行,所以不会影响主线程的UI操作,但每一个回调结果都会回到主线程。 连接操作会在主线中进行。
扫描过程中,中止扫描操作
`void cancelScan()`
BleManager.getInstance().cancelScan();
Tips:
- 调用该方法后,如果当前还处在扫描状态,会立即结束,并回调`onScanFinished`方法。
如果你有技术方面问题与想法想与我沟通,可以通过下面的方式联系我。
QQ: 1033526540
Email: jasonchenlijian@gmail.com
如果此框架对你帮助很大,并且你很想支持库的后续开发和维护,那么你可以扫描下方捐赠二维码支持我一下,我将不胜感激。