【问题标题】:Delphi Tethering on Android ServiceAndroid 服务上的 Delphi 网络共享
【发布时间】:2020-02-09 00:57:09
【问题描述】:

我正在 Delphi 上测试网络共享。

在 Windows 10 应用程序(标准应用程序和服务)中一切正常。 在标准的 android 应用中一切都很好。

Android 服务存在问题。我可以从外部客户端连接到 android 服务中的网络共享、接收和发送资源等。但以下方法和事件不起作用:从客户端输出的连接 (AutoConnect)、OnEndManagersDiscovery、OnEndProfileDiscovery、OnNewManager 不触发等。

我无法弄清楚为什么会发生这种情况......

有人知道错误可能在哪里吗?

【问题讨论】:

  • 可能是权限。什么版本的安卓?使用 logcat 查看器查看出现的错误消息(如果有)。我这里有一个:github.com/DelphiWorlds/DeviceLens
  • 在 Android 6.0、8.0.0 和 9.0 上测试。设置了权限(ACCESS_NETWORK_STATE、READ_PHONE_STATE)(用于服务 - 尽管不必要)以及标准 Android 应用程序(完美运行而没有问题)。 Android 设备监视器不报告任何错误消息。
  • Device Lens (ver. 1.1.0) 也不报告任何错误信息。

标签: android delphi delphi-10.3-rio tethering


【解决方案1】:

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

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

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

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 来更新事件。

procedure TTetheringManager.DoRequestStorage(var AStorage: TTetheringCustomStorage);
begin
  AStorage := nil;
  if Assigned(FOnRequestStorage) then
    FOnRequestStorage(Self, AStorage);
end;

更新现在我发现解决此问题的最简单方法是禁用 TetheringManager 和 TetheringAppProfile 的 SynchroniyeEvents。

【讨论】:

  • "该库不适用于 android 服务。"有趣的是,这是我之前阅读您的问题时的第一个预感。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 2017-03-29
    • 1970-01-01
    • 2011-01-17
    相关资源
    最近更新 更多