- 如果mBluetoothAdapter为空,是因为手机蓝牙不支持与ble设备通讯,换句话说就是安卓手机系统在4.3以下了。
step3、判断手机蓝牙是否被打开
mBluetoothAdapter.isEnabled()
-
如果返回true,这个时候就可以扫描了
-
如果返回false,这时候需要打开手机蓝牙。 可以调用系统方法让用户打开蓝牙。
Intent enable = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
startActivity(enable);
2、搜索蓝牙
step1、开始扫描
//10s后停止搜索
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
mBluetoothAdapter.stopLeScan(mLeScanCallback);
}
}, 1000 * 10);
UUID[] serviceUuids = {UUID.fromString(service_uuid)};
mBluetoothAdapter.startLeScan(serviceUuids, mLeScanCallback);
-
startLeScan中,第一个参数是只扫描UUID是同一类的ble设备,第二个参数是扫描到设备后的回调。
-
因为蓝牙扫描比较耗电,建议设置扫描时间,一定时间后停止扫描。
-
如果不需要过滤扫描到的蓝牙设备,可用
mBluetoothAdapter.startLeScan(mLeScanCallback);
进行扫描。
step2、扫描的回调
//蓝牙扫描回调接口
private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback(){
@Override
public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) {
if (device.getName() == null) {
return;
}
Log.e(“—>搜索到的蓝牙名字:”, device.getName());
//可以将扫描的设备弄成列表,点击设备连接,也可以根据每个设备不同标识,自动连接。
}
};
3、连接蓝牙
step1、获取设备的mac地址,然后连接。
//获取所需地址
String mDeviceAddress = device.getAddress();
BluetoothGatt mBluetoothGatt = device.connectGatt(context, false, mGattCallback);
step2、onConnectionStateChange()被调用
- 连接状态改变时,mGattCallback中onConnectionStateChange()方法会被调用,当连接成功时,需要调用
mBluetoothGatt.discoverServices();
去获取服务。
step3、onServicesDiscovered()被调用
-
调用
mBluetoothGatt.discoverServices();
方法后,