Delphi 10.2 Tokyo开发BLE应用:设备发现异常问题求助
针对Delphi 10.2 Tokyo BLE跨平台开发的问题排查方案
我之前在Delphi 10.2 Tokyo开发适配Android和Windows 10的BLE应用时,也碰到过类似的扫描设备问题,结合踩过的坑给你几个具体的排查和解决方向:
Windows 10平台排查点
- 确认系统蓝牙状态:首先确保Windows系统蓝牙已经开启,同时检查系统服务里的
Bluetooth Support Service是否处于运行状态(可以通过services.msc打开服务列表查看)。如果这个服务没启动,TBluetoothLE组件根本无法正常工作。 - 调整初始化与扫描的顺序:直接在按钮点击事件里先设
Enabled := True再立刻调用DiscoverDevices,可能会因为组件还没完成初始化导致扫描失败。建议改成监听组件的OnEnabledChanged事件,等组件真正就绪后再启动扫描:
procedure TForm1.BluetoothLE1EnabledChanged(Sender: TObject); begin if BluetoothLE1.Enabled then BluetoothLE1.DiscoverDevices(2000); // 这里可以根据实际情况调整扫描时长 end; procedure TForm1.Button1Click(Sender: TObject); begin BluetoothLE1.Enabled := True; end;
- 检查应用权限:虽然Delphi会自动处理基础权限,但偶尔还是需要确认应用有访问蓝牙的权限。可以在Windows系统设置的「隐私和安全性」→「蓝牙」里,确保你的应用被允许访问蓝牙。
Android平台排查点
- 配置必要的权限:Android对BLE的权限要求比Windows严格很多,在Delphi 10.2中必须确保
AndroidManifest.xml里添加了对应权限:- 针对Android 6.0及以上:需要
ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION(系统要求BLE扫描必须依赖位置权限) - 针对Android 12及以上:额外需要
BLUETOOTH_SCAN和BLUETOOTH_CONNECT权限 - 通用权限:
BLUETOOTH、BLUETOOTH_ADMIN
你可以在项目选项的「Application」→「Permissions」里直接勾选对应的权限,Delphi会自动帮你写入Manifest文件。
- 针对Android 6.0及以上:需要
- 开启位置服务:很多Android设备要求必须开启位置服务才能扫描到BLE设备,这个是系统层面的限制,测试时记得打开设备的位置开关。
- 调整扫描时长:Android系统对BLE扫描的时长有一定限制,2000ms可能太短导致扫不到设备,可以尝试延长到5000ms,同时监听
OnDiscoverLEDevice事件来实时获取扫描到的设备,而不是只等扫描结束。
关于你提到的「未运行某个程序则无法发现设备」的推测
你描述里提到的“未运行上述O...”大概率是指系统蓝牙配置工具或者之前的蓝牙测试程序,这种情况通常是因为系统蓝牙服务没有完全初始化,或者设备的蓝牙适配器需要被唤醒。建议每次测试前先手动打开系统的蓝牙设置面板,确保蓝牙处于正常工作状态后再启动你的应用。
内容的提问来源于stack exchange,提问作者wBB
相关产品推荐
相关产品推荐

