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

Delphi 10.2.2 Tokyo Android平台BLE服务无法显示问题求助

解决Delphi 10.2.2 Tokyo Android BLEScanner示例无法显示服务的问题

嘿,这个问题我之前帮不少开发者排查过,Delphi 10.2.2在Android上运行BLE应用确实有几个容易忽略的关键点,尤其是服务发现这块,给你列几个核心的设置和排查方向:

  • 必须补全的Android权限(静态+动态)
    Android 6.0(API 23)及以上版本对BLE扫描强制要求位置权限,这是很多人踩坑的地方。首先要确保你的项目AndroidManifest.xml里添加了以下权限:

    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />
    

    光加静态权限还不够,还要在代码里动态申请位置权限——示例项目大概率没做这个。你可以在启动扫描前添加权限检查逻辑,比如:

    uses
      System.Permissions;
    
    procedure TForm1.ButtonScanClick(Sender: TObject);
    begin
      PermissionsService.RequestPermissions([ACCESS_FINE_LOCATION],
        procedure(const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>)
        begin
          if AGrantResults[0] = TPermissionStatus.Granted then
            BLEManager1.StartScan
          else
            ShowMessage('需要位置权限才能扫描BLE设备');
        end);
    end;
    
  • 调整服务发现的时机
    示例里的代码可能在设备刚连接就立刻调用DiscoverServices,但Android上BLE连接需要短暂的初始化时间,直接调用会导致服务发现失败。你需要把服务发现的逻辑移到TBLEDevice的OnConnected事件里,比如:

    procedure TForm1.BLEDeviceConnected(Sender: TObject);
    var
      LDevice: TBLEDevice;
    begin
      LDevice := Sender as TBLEDevice;
      LDevice.DiscoverServices;
    end;
    

    同时确保你已经正确绑定了OnServicesDiscovered事件,在这个事件里去遍历并显示服务列表。

  • 排查Delphi 10.2.2的BLE组件bug
    这个版本的TBLEManager和TBLEDevice存在一些已知的服务发现问题,比如OnServicesDiscovered事件可能不会触发。如果遇到这种情况,可以尝试在调用DiscoverServices后延迟1-2秒,手动遍历TBLEDevice.Services集合来获取服务信息;另外,有些BLE设备只允许指定UUID的服务发现,你可以试试在DiscoverServices里传入目标服务的UUID数组,而不是默认的空数组(即发现全部服务)。

  • Android系统版本适配补充
    如果你的设备是Android 8.0(API 26)及以上,还需要额外添加BLUETOOTH_SCAN和BLUETOOTH_CONNECT权限(虽然Delphi 10.2.2原生不支持,但可以手动在Manifest里添加),不过这个版本的Delphi对高版本Android的BLE支持有限,优先处理前面的权限和时机问题。

按照这几个步骤排查,应该就能解决服务无法显示的问题了。

内容的提问来源于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 10:34:29