启用 BLE 扫描后需要等待多长时间才能开始?



在Android中,在设备上启用蓝牙后,无法直接启动蓝牙扫描。如果这样做,将收到以下错误:

D/BluetoothLeScanner: Scan failed, reason: app registration failed

onScanFailed方法将在实现的ScanCallBack中调用,错误代码为 2。此错误原因的背后知之甚少。但是我发现了以下内容(经过几个小时的尝试(:

如果您在启用蓝牙后等待 ~5 秒,然后开始扫描(因此不直接(,它会起作用。扫描从成功开始。我通过这个问题的第一个答案提出了这个临时解决方案:Android BLE:"扫描失败,UUID应用程序注册失败的原因">

如您所见,这个问题已经存在了一年多,但是提问者正在使用单独的 Android 库来处理 BLE。

我的问题是,有没有比我上面描述的更好的解决方案?

启用蓝牙适配器后,它需要一些时间才能实际执行所需的所有初始化,因此不允许您开始扫描。

您可以使用以下广播接收器捕获适配器打开事件的广播事件:

private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(intent.getAction())) {
int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1);
if (state == BluetoothAdapter.STATE_OFF || state == BluetoothAdapter.STATE_TURNING_OFF) {
if (state == BluetoothAdapter.STATE_TURNING_OFF) {
onBluetoothDisabling();
} else {
onBluetoothDisabled();
}
requestEnableBluetooth();
} else if (state == BluetoothAdapter.STATE_ON) {
onBluetoothEnabled();
}
}
}
};

此外,在onCreate()方法中注册广播接收器:

IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
registerReceiver(mBroadcastReceiver, filter);

最新更新