BLE是Android4.3以上加入的新功能,他可以很大程度上节省了设备的功耗,他会在激活的时候进入一个快速的广播段,这时候周围的设备可以搜索到BLE设备,当匹配成功的时候就会建立一个长连接,如果没有匹配成功,他就会在一段时间后自动进入相对慢速的广播段,给周围设备发送的广播频率也会大大减少,直到没有设备与他匹配成功的时候,会自动停止发送广播,处于关闭状态,周围的设备也无法搜索到此BLE设备。
1.开始扫描
BluetoothAdapter.getDefaultAdapter().startLeScan(null, leScanCallback);//开始扫描,就可以一直搜索周围的蓝牙2.扫描的结果在callback里,new一个callback,回调里的信息都在device里,比如name,mac等等,一般我在这里会去过滤一些mac地址来指定连接哪个BLE设备
//扫描的回调 BluetoothAdapter.LeScanCallback leScanCallback = new BluetoothAdapter.LeScanCallback() { @Override public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) { if (isConnecting || isConnected() || TextUtils.isEmpty(device.getName()) || TextUtils.isEmpty(device.getAddress()) ) { return; } if (!nameList.contains(device.getName())) { nameList.add(device.getName()); UIUtils.sendBleMes("DEVICENAME", device.getName()); } if(!TextUtils.isEmpty(last_DeviceName)&&last_DeviceName.equals(device.getName())){ //如果扫描到上次保存到sp的设备,就直接连接 tryConnect(device); return; } if(tryconnect){ if(device.getName().equals(connectingName)){ connectingName = ""; tryconnect = false; tryConnect(device); } } } };3.如果上一步中的device经过一系列判断是我们自己的device,那么就执行下一步连接的操作
//尝试连接 private void tryConnect(BluetoothDevice device) { isConnecting = true;