对已做项目做一个总结,需求是通过蓝牙搜索设备,选择连接后,进行余后操作,那么首先要考虑到如何使用蓝牙,以及和设备进行连接呢,可以先了解一下有关BlueTooth的相关API,了解一下基本用法:https://www.jianshu.com/p/6dca236f6ad5
1.首先添加依赖权限:
compile 'com.inuker.bluetooth:library:1.4.0'
2.搜索设备,要用到BluetoothDevice,获取到设备的名字及绑定状态。
private BluetoothClient mClient;
//搜索设备:
public void searchDevice(final SearchResponse response) {
if (mClient.isBluetoothOpened()) {//判断蓝牙是否关闭,通过监听当前的状态进行搜索
scan(response);
} else {
mClient.openBluetooth();
mClient.registerBluetoothStateListener(new BluetoothStateListener() {
@Override
public void onBluetoothStateChanged(boolean openOrClosed) {
if (openOrClosed) {
scan(response);
}
}
});
}
}
// * @param response 扫描结果回调
// * @param duration 扫描间隔
// * @param times 扫描次数
public void searchDevice(final SearchResponse response, int duration, int times){
if (mClient.isBluetoothOpened()) {
scan(response, duration, times);
} else {
mClient.openBluetooth();
mClient.registerBluetoothStateListener(new BluetoothStateListener() {
@Override
public void onBluetoothStateChanged(boolean openOrClosed) {
if (openOrClosed) {
scan(response, duration, times);
}
}
});
}
}
private void scan(SearchResponse response) {
scan(response, 2000, 120);
}
private void scan(SearchResponse response, int duration, int times) {
//设置蓝牙搜索的频率以及次数:
SearchRequest request = new SearchRequest.Builder()
.searchBluetoothLeDevice(duration, times)
.build();
mClient.search(request, response);//搜索
}
2.选择设备连接的方法(通过设备的编码来选择设备连接):
//连接设备:
public void connectDevice(SearchResult device, BleConnectResponse response) {
mClient.stopSearch();
BleConnectOptions options = new BleConnectOptions.Builder()
.setConnectRetry(3) // 连接如果失败重试3次
.setConnectTimeout(30000) // 连接超时30s
.setServiceDiscoverRetry(3) // 发现服务如果失败重试3次
.setServiceDiscoverTimeout(20000) // 发现服务超时20s
.build();
mConnectMac = device.getAddress();
mClient.connect(mConnectMac, options, response);
}
3.判读蓝牙是否被连接:
//获取当前蓝牙状态:
int connectStatus = mGpDeviceManager.getConnectStatus(device);
if (connectStatus == Constants.STATUS_DEVICE_CONNECTED ||
connectStatus == Constants.STATUS_DEVICE_CONNECTING) {
Toast.makeText(getContext(), "该蓝牙已被连接", Toast.LENGTH_SHORT).show();
return;
}
4.监听通知回调:
public void notifyTime(final OnNotifyTimeListener listener) {
mClient.notify(mConnectMac,
UUID_FFF0_SERVICE,
UUID_FFF1_CHARACTERISTIC,
new BleNotifyResponse() {
@Override
public void onNotify(UUID service, UUID character, byte[] value) {
if (listener != null) {
listener.onNotifyTime(value[1], value[2]);
}
}
@Override
public void onResponse(int code) {
if (!(code == Constants.REQUEST_SUCCESS)) {
notifyTime(listener);
}
}
});
}
5.通讯,连接设备后(UUID为设备唯一指标),使用设备工作:
public void startCure(BleWriteResponse response) {
mClient.write(mConnectMac,
UUID_FFF0_SERVICE,
UUID_FFF2_CHARACTERISTIC,
startCmd,
response);
}
5.蓝牙断开:
mClient.disconnect(MAC);