AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Delphi Desktop-Applikation und Android-APP reconnect
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi Desktop-Applikation und Android-APP reconnect

Ein Thema von Siggi · begonnen am 14. Feb 2021 · letzter Beitrag vom 15. Feb 2021
Antwort Antwort
Siggi

Registriert seit: 19. Jun 2004
Ort: Lollar
52 Beiträge
 
Delphi 11 Alexandria
 
#1

Delphi Desktop-Applikation und Android-APP reconnect

  Alt 14. Feb 2021, 12:16
Hallo zusammen,

ich erstelle mein erstes Android-Projekt und habe eine Frage zum Verbindungsaufbau/-Abbau.

Grundkonzept:
  • Eine Desktop-Applikation arbeitet als "Server" und liefert auf Anforderung aus der Android-App Daten
  • Die Verbindung wird per TetheringManager.Autoconnect aufgebaut (WLAN)
  • die Android-App sendet eine Anfrage
  • die Anfrage wird in der Server-Applikation per ResourceReceived eines TetheringAppProfiles empfangen
  • die Server-Applikation antwortet
  • Die Antwort wird in der Android-App ebenfall über ein ResourceReceived eines TetheringAppProfile empfangen

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:
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;
Bei der Desktop-Applikation habe ich vergleichbaren Code auf einem Button "Verbindung aufbauen/trennen"
Delphi-Quellcode:
procedure TfrmInventory.btnAppConnectClick(Sender: TObject);
VAR I: Integer;
begin
  if btnAppConnect.Caption='APP verbindenthen // 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;
Mache ich da einen grundsätzliche Denkfehler oder fehlt nur etwas in meinem Code?

Danke für Eure Tipps,
Siggi
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.824 Beiträge
 
Delphi 12 Athens
 
#2

AW: Delphi Desktop-Applikation und Android-APP reconnect

  Alt 14. Feb 2021, 14:43
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
  Mit Zitat antworten Zitat
Siggi

Registriert seit: 19. Jun 2004
Ort: Lollar
52 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Delphi Desktop-Applikation und Android-APP reconnect

  Alt 14. Feb 2021, 15:14
Turbomagic: Danke für den Hinweis auf's veraltete Profil, gerade zum Jahreswechsel umgestellt und jetzt auch hier angepasst.
  Mit Zitat antworten Zitat
Siggi

Registriert seit: 19. Jun 2004
Ort: Lollar
52 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Delphi Desktop-Applikation und Android-APP reconnect

  Alt 14. Feb 2021, 16:48
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:
  
  ShowMessage('AManagerInfo.ManagerIdentifier:'+AManagerInfo.ManagerIdentifier);
Beende ich die Desktop-App oder beende von dort die Verbindung und baue sie neu auf, erhalte ich immer die gleichen Daten.
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
  Mit Zitat antworten Zitat
Siggi

Registriert seit: 19. Jun 2004
Ort: Lollar
52 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Delphi Desktop-Applikation und Android-APP reconnect

  Alt 15. Feb 2021, 17:34
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:
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;
Dann kann ich beliebig die Android-App beenden und von der Desktop-Applikation die Verbindung neu aufbauen.
Das geht vielleicht auch einfacher / besser (??), aber so funktioniert es erst mal.

Siggi
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.824 Beiträge
 
Delphi 12 Athens
 
#6

AW: Delphi Desktop-Applikation und Android-APP reconnect

  Alt 15. Feb 2021, 17:40
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
https://quality.embarcadero.com/ zu
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...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz