首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android Service上的Delphi Tethering

Android Service上的Delphi Tethering
EN

Stack Overflow用户
提问于 2020-02-09 08:57:10
回答 2查看 375关注 0票数 0

我正在Delphi上测试tethering。

Windows 10应用程序(无论是标准应用程序还是服务应用程序)都运行良好。在标准的android应用程序中,一切也都很好。

问题出在Android服务上。我可以从外部客户端连接到安卓服务中的tethering,接收和发送资源等。但是以下方法和事件不起作用:从客户端输出的连接(AutoConnect),OnEndManagersDiscovery,OnEndProfileDiscovery,OnNewManager不激发等。

我想不出为什么会发生这样的事情。

有谁知道bug在哪里吗?

EN

回答 2

Stack Overflow用户

发布于 2020-02-09 17:21:54

我无法做到这一点,所以我详细检查了System.Tether.Manager的源代码(System.Tether.AppProfile也是如此),很可能我找到了问题的原因。

执行TetheringManager.DiscoverManagers命令时,不会发生任何事件,但如果在此命令之后执行TetheringManager.RemoteManagers语句,则会列出周围的所有设备。

问题是该库使用TThread.Synchronize函数来同步事件。此功能需要一个主UI线程才能实现其功能。此功能没有android服务。因此,事件更新每次都会失败(例如,onEndManagersDiscovery)。该库不打算在android服务中使用。

代码语言:javascript
复制
procedure TTetheringManager.DoEndManagersDiscovery(const ARemoteManagers: TTetheringManagerInfoList);
begin
  RegisterManagers(ARemoteManagers);
  if Assigned(FOnEndManagersDiscovery) then
  begin
    if SynchronizeEvents then
      TThread.Synchronize(nil,
        procedure
        begin
          FOnEndManagersDiscovery(Self, ARemoteManagers);
        end)
    else
      FOnEndManagersDiscovery(Self, ARemoteManagers);
  end
end;

有趣的是,例如,OnRequestStorage事件之所以有效,是因为它直接使用FOnRequestStorage(Self,AStorage)而不是TThread.Synchronize来更新事件。

代码语言:javascript
复制
procedure TTetheringManager.DoRequestStorage(var AStorage: TTetheringCustomStorage);
begin
  AStorage := nil;
  if Assigned(FOnRequestStorage) then
    FOnRequestStorage(Self, AStorage);
end;

更新:现在我发现解决这个问题的最简单的方法是禁用booth和TetheringAppProfile的SynchroniyeEvents。

票数 0
EN

Stack Overflow用户

发布于 2020-04-28 08:07:33

如果在没有超时的情况下执行AutoConnect,则会触发EndofAutoConnect的事件!今天发现..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60132629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档