Мне не удалось это сделать, поэтому я подробно изучил исходный код System.Tether.Manager (то же самое относится и к System.Tether.AppProfile) и, скорее всего, нашел причину проблемы.
Когда выполняется команда TetheringManager.DiscoverManagers, событие не возникает, но если после этой команды выполняется оператор TetheringManager.RemoteManagers, отображаются все окружающие устройства.
Проблема заключается в том, что библиотека использует TThread . Синхронизировать функцию для синхронизации событий. Эта функция требует основного потока пользовательского интерфейса для его функциональности. Эта функция не имеет службы 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 для обновления event.
procedure TTetheringManager.DoRequestStorage(var AStorage: TTetheringCustomStorage);
begin
AStorage := nil;
if Assigned(FOnRequestStorage) then
FOnRequestStorage(Self, AStorage);
end;
Обновление : Теперь я обнаружил, что самым простым способом решения этой проблемы будет отключение SynchroniyeEvents для стенда TetheringManager и TetheringAppProfile.