好厚米们,我来了!
这次分享的是经典蓝牙设备执行扫描动作时源码的执行流程。
先来了解下“经典蓝牙设备”和“低功耗蓝牙设备”的概念 。(ps:因为扫描有两种方式,分别适合不同类型的设备)
经典蓝牙设备:是指采用蓝牙标准2.0及以上版本,支持传输速率为1Mdps的传统蓝牙设备。这类设备通常需要较高的功耗,用于数据传输范围较小且需要高带宽的应用,例如音频传输,文件传输等。常见的经典蓝牙设备有:蓝牙耳机,蓝牙音箱,蓝牙打印机,蓝牙键盘,蓝牙鼠标。
低功耗蓝牙设备:是指采用蓝牙标准4.0及以上版本,支持传输速率1Mdps ~ 2Mdps的低功耗蓝牙设备。这些设备通常需要较低的功耗,用于数据传输范围比较小且需要低带宽的应用。常见的低功耗蓝牙设备有:智能手环,智能门锁
下面来说下应用层是如何使用蓝牙扫描功能的。
第一种就是使用ScanCallback的回调:
代码如下,这种方式更适用于“低功耗蓝牙设备”扫描状态的监听(源码我就不深究了,简单介绍下):
//声明BluetoothLeScanner
private BluetoothLeScanner scanner =BluetoothAdapter.getDefaultAdapter().getBluetoothLeScanner();
ScanCallback scanCallback = new ScanCallback() {
@Override
public void onScanResult(int callbackType, ScanResult result) {
super.onScanResult(callbackType, result);
// 处理扫描到的设备信息
}
@Override
public void onScanFailed(int errorCode) {
super.onScanFailed(errorCode);
// 扫描失败处理
}
};
// 开始扫描
if (scanner != null) {
ScanSettings settings = new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.build();
// 添加过滤条件
List<ScanFilter> filters = new ArrayList<>();
//权限检查
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
scanner.startScan(filters, settings, scanCallback);
}
// 停止