![]() |
Delphi Desktop-Applikation und Android-APP reconnect
Hallo zusammen,
ich erstelle mein erstes Android-Projekt und habe eine Frage zum Verbindungsaufbau/-Abbau. Grundkonzept:
Das ganze funktioniert wunderbar, wenn ich beide Applikationen neu starte, verbinde und miteinander kommunizieren lasse. Beende ich eine der beiden Applikationen, starte nur diese neu und baue die Verbindung neu auf, erhalte ich zwar über TetheringAppManger.PairedToRemote eine positive Rückmeldung zum Verbindungsaufbau, aber die Events ResourceReceived werden nicht mehr ausgelöst. Beim Beenden der Android-App baue ich die Verbindung wie folgt ab:
Delphi-Quellcode:
Bei der Desktop-Applikation habe ich vergleichbaren Code auf einem Button "Verbindung aufbauen/trennen"
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
var I: Integer; begin for I := TetheringManager1.PairedManagers.Count - 1 downto 0 do TetheringManager1.UnPairManager(TetheringManager1.PairedManagers[I]); end; procedure TMainForm.FormDestroy(Sender: TObject); begin TetheringAppProfile1.Enabled:=False; TetheringManager1.Enabled:=False; end;
Delphi-Quellcode:
Mache ich da einen grundsätzliche Denkfehler oder fehlt nur etwas in meinem Code?
procedure TfrmInventory.btnAppConnectClick(Sender: TObject);
VAR I: Integer; begin if btnAppConnect.Caption='APP verbinden' then // wenn's grundsätzlich geht, anderen Weg als per Caption, aber für ersten Test OK begin TetheringAppProfile1.Enabled:=true; TetheringManager1.Enabled:=true; TetheringManager1.AutoConnect; end else begin for I := TetheringManager1.PairedManagers.Count - 1 downto 0 do TetheringManager1.UnPairManager(TetheringManager1.PairedManagers[I]); TetheringAppProfile1.Enabled:=False; TetheringManager1.Enabled:=False; btnAppConnect.Caption:='APP verbinden'; end; end; Danke für Eure Tipps, Siggi |
AW: Delphi Desktop-Applikation und Android-APP reconnect
Weiß ich leider auch nicht, es wäre aber interessant, da ich das in einem Projekt evtl. auch nutzen will.
Noch was: die von dir im Profil angegebene Delphi Version kann eher nicht sein, da gab's das noch nicht ;-) |
AW: Delphi Desktop-Applikation und Android-APP reconnect
Turbomagic: Danke für den Hinweis auf's veraltete Profil, gerade zum Jahreswechsel umgestellt und jetzt auch hier angepasst.
|
AW: Delphi Desktop-Applikation und Android-APP reconnect
Habe jetzt noch mal ein paar Tests gemacht.
Problem scheint auf der Seite der Android-App zu liegen. Die Dekstop-App kann ich beenden, starten, per Button die Verbindung trennen und neu aufbauen und es klappt alles. Beende ich die Android-App (Application.Terminate und dann per Android-Task-Manager die App schließen oder "alle schließen") und starte nur die Android-App neu, kommt zwar die Verbindung zustande, aber die Events werden nicht ausgelöst. Einen Schritt weiter (Ursache aber noch keine Lösung) hat mich folgende Test-Ausgabe gebracht:
Delphi-Quellcode:
Beende ich die Desktop-App oder beende von dort die Verbindung und baue sie neu auf, erhalte ich immer die gleichen Daten.ShowMessage('AManagerInfo.ManagerIdentifier:'+AManagerInfo.ManagerIdentifier); Beende ich aber die Android-App, wird nach deren Neustart ein andere Wert für AManagerInfo.ManagerIdentifier zurückgeliefert. Demnach müsste ich "nur" einen Weg finden, entweder unter Android immer den gleichen ManagerIdentifier zu verwenden oder in der Desktop-App bei geändertem ManagerIdentifier auf den geänderten ManagerIdentifier zu reagieren. Vermutlich muss nur etwas mehr "aufgeräumt" werden beim Reconnect, damit dann der neue ManagerIdentifier für die Events greift - aber wie? vielleicht hat mit dieser Zusatzinfo jemand einen Tipp für mich... VG Siggi |
AW: Delphi Desktop-Applikation und Android-APP reconnect
Habe mir jetzt erst mal so beholfen, dass ich beiden Objekte TetheringManager und TetheringAppProfile nicht als Objekte zur DesignTime aufs Formular lege, sondern zur Laufzeit neu erzeuge und bei Reconnect komplett verwerfe und erstelle. Damit "vergisst" der TetheringManager dann auch den bisherigen ManagerIdentifier und verbindet die ResourceReceived-Methode mit dem neuen ManagerIdentifier.
Delphi-Quellcode:
Dann kann ich beliebig die Android-App beenden und von der Desktop-Applikation die Verbindung neu aufbauen.
procedure TmyForm.CreateTethering;
begin TetheringManager1 := TTetheringManager.Create(self); with TetheringManager1 do begin OnPairedToRemote := TetheringManager1PairedToRemote; Text := 'TetheringManager1'; AllowedAdapters := 'Network'; end; TetheringAppProfile1 := TTetheringAppProfile.Create(self); with TetheringAppProfile1 do begin Manager := TetheringManager1; Text := 'TetheringAppProfile1'; Group := 'myGroup'; OnResourceReceived := TetheringAppProfile1ResourceReceived; end; end; procedure TmyForm.FreeTethering; begin if TetheringManager1 <> nil then TetheringManager1.Free; if TetheringAppProfile1 <> nil then TetheringAppProfile1.Free; end; Das geht vielleicht auch einfacher / besser (??), aber so funktioniert es erst mal. Siggi |
AW: Delphi Desktop-Applikation und Android-APP reconnect
Schön, dass du eine Lösung gefunden hast.
Gibt's keine Möglichkeit die vergebene ID anderweitig zu resetten? Falls hier nichts mehr kommt wäre es evtl. auch gut deinen Fall als Bugreport in ![]() beschreiben damit, falls es nicht doch eine andere Lösung gibt, das grundelegende Problem angegangen wird. Weil dein Szenario wird ja ganz bestimmt in der Praxis auftreten... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz