You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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设备要求必须开启位置服务才能扫描到BLE设备,这个是系统层面的限制,测试时记得打开设备的位置开关。
  • 调整扫描时长:Android系统对BLE扫描的时长有一定限制,2000ms可能太短导致扫不到设备,可以尝试延长到5000ms,同时监听OnDiscoverLEDevice事件来实时获取扫描到的设备,而不是只等扫描结束。

关于你提到的「未运行某个程序则无法发现设备」的推测

你描述里提到的“未运行上述O...”大概率是指系统蓝牙配置工具或者之前的蓝牙测试程序,这种情况通常是因为系统蓝牙服务没有完全初始化,或者设备的蓝牙适配器需要被唤醒。建议每次测试前先手动打开系统的蓝牙设置面板,确保蓝牙处于正常工作状态后再启动你的应用。

内容的提问来源于stack exchange,提问作者wBB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 07:03:42