Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Delphi versehentliches Beenden einer Android App (https://www.delphipraxis.net/214718-versehentliches-beenden-einer-android-app.html)

pollo 26. Feb 2024 19:07

versehentliches Beenden einer Android App
 
Hallo an das Delphi-Praxis Forum,

nun besuche ich schon seit über 10 Jahren diese Platform, und konnte immer wieder mit Hilfe Eurer Beiträge meine Programmierer-Probleme lösen. Dafür zunächst meinen herzlichen Dank !!
Nun bin ich an einem Punkt, wo ich - nach vielen Recherchen in alle Richtungen - nicht weiterkomme. Und deshalb frage ich Euch aktiv um Rat. Ich poste hier zum allerersten Mal, deshalb habt bitte Nachsicht, falls ich irgendwelche Regeln - unwissentlich - missachten sollte :roll:

Das Problem lässt sich mit wenigen Sätzen beschreiben - ohne Beispielcode oder Tech-Talk: Ich entwickle eine Android-App unter RAD Studio 12.0 Architekt, und das funktionert auch mittlerweile ganz gut. Nun habe ich bei meinen Tests festgestellt, dass - sobald ich mein Test-Smartphone (ein ausrangiertes Samsung Galaxy S5 mit Android 6.0) in die Hand nehme und versehentlich auf die Taste rechts neben dem Home-Button "latsche", die App beendet wird. Ohne Rückfrage. Nach dem Neustart der App sind natürlich alle zuvor getätigten Aktionen verschwunden...

Ich möchte gerne diese Taste - ich glaube sie nennt sich "Zurück-Taste" (aber selbst an diese Info kommt man nur schwer 'ran) - deaktiveren und habe sowohl in meiner IDE, als auch auf dem Smartphone nach allen erdenklichen Möglichkeiten gesucht, leider vergeblich.

Wer kann mir hier weiterhelfen?

Vielen lieben Dank!

Pollo

philipp.hofmann 27. Feb 2024 06:53

AW: versehentliches Beenden einer Android App
 
Du musst auf dem Form die Methode FormKeyUp implementieren und eine Action hinter vkBack legen.
Bei mir ist es unter Windows, dass bei der Escape-Taste der Voll-Bildmodus beendet wird
und unter Android geprüft wird, ob die virtuelle Tastatur heruntergefahren wird:

Delphi-Quellcode:
procedure TicTrainerF.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
begin
  if (inFullscreenMode and (key=vkEscape)) then
  begin
    menuItemList.resetFullScreen();
    exit;
  end;
  {$IFDEF ANDROID}
  if Key = vkHardwareBack then
  begin
    if ((pQuestion.Visible and eQuestion.Visible) or ((TabControl.Visible) and
        ((tabControl.activeTab=tiBrowser) or (tabControl.activeTab=tiVideoChat) or (tabControl.activeTab=tiConnections)))) then
    begin
      if (keyboardService <> nil) then
        keyboardService.HideVirtualKeyboard;
    end else begin
      showPanel(pWizard);
      tiWizardClick(Sender);
      if (menuItemList<>nil) then
        menuItemList.checkForShowAction(false);
    end;
    Key:=0;
  end;
  {$ENDIF}
end;

pollo 27. Feb 2024 08:27

AW: versehentliches Beenden einer Android App
 
Hallo Philipp,

das klingt nach einem plausiblen Ansatz. Zunächst mal vielen herzlichen Dank!

Bevor ich dies in die Tat umsetzen kann, muss ich mich wohl noch in die Materie "VirtualKeyboard" einarbeiten. Momentan stolpert mein Compiler noch über einige Bezeichner in Deinem Quellcode :oops:

Habe bereits ein brauchbares Embarcadero Dokument zu diesem Thema gefunden, das probiere ich gleich heute Abend aus...

Rollo62 27. Feb 2024 09:45

AW: versehentliches Beenden einer Android App
 
Zitat:

Zitat von pollo (Beitrag 1533901)
(ein ausrangiertes Samsung Galaxy S5 mit Android 6.0)

Ich will ja kein Spielverderber sein, aber offiziell wird Android 6 wohl nicht mehr unterstützt.
http://docwiki.embarcadero.com/Platf...s/en/Main_Page
Aber es funktioniert doch meist weit zurück, kommt im Einzelfall wohl auf die Funktionen an, welche Du nutzen willst.

philipp.hofmann 27. Feb 2024 09:53

AW: versehentliches Beenden einer Android App
 
Mein Quellcode war ja nur ein Beispiel. Du kannst ja selbst entscheiden, was du bei dem Back-Klick machen möchtest.
Bei mir ist es eben so, dass ich schaue, ob die virtuelle Tastatur offen ist und diese dann schließe.
Falls dies nicht der Fall ist, springe ich auf andere Dialog in der App.

pollo 28. Feb 2024 08:28

AW: versehentliches Beenden einer Android App
 
So Ihr Lieben,

das klappt also wunderbar!

Ich teste ab sofort mit einem Android 11 Smartphone. Danke an Rollo62 für den Tipp!

Und nochmals danke an Philipp für den entscheidenden Hinweis!

himitsu 28. Feb 2024 08:34

AW: versehentliches Beenden einer Android App
 
Funktioniert OnCloseQuery im Android nicht?

philipp.hofmann 28. Feb 2024 14:20

AW: versehentliches Beenden einer Android App
 
Es gibt in Android- und iOS-App ja kein normales Close, was ich also Nutzer in der App aufrufen kann. Ich kann nur die App von außen schließen und dies kann man auch über die App nicht verhindern. OnCloseQuery ist ja dazu da, dass Beenden im Zweifelfall zu verhindern, um noch eine Frage zu stellen oder was auch immer. Verhindern geht unter Android nicht, wenn der Nutzer die App wegschiebt, schiebt er sie weg.

Wenn die App beim Klick auf den Back-Button auch crasht, macht sie an der Stelle etwas anderes, was so jetzt in geordnete Bahnen umgelenkt wurde.

himitsu 28. Feb 2024 15:44

AW: versehentliches Beenden einer Android App
 
Ja, Wegschieben ala "wie im Windows quasi per Taskmanager schließen/abschießen",

doch hier ging es um das Schließen über den "Zurück"-Knopf und da steuert "eigentlich" Delphi die Aktion,
drum hätte ich gedacht, dass es hier dann auch über's OnClose/OnCloseQuery läuft.

Bzw. in der VCL wird OnCloseQuery auch nur beim Close aufgerufen, aber nicht wenn man direkt Free/Release oder Application.Terminate auslöst.



Ich kenn aber auch so schon mehrere Programme, wo das "Zurück" nicht immer funktioniert (auch nicht Delphi).
Dort wird bei zurück normal erstmal die aktuelle Aktion beendet (Menüfenster geschlossen) und wenn bereits im Hauptfenster, dann kommt eine "Programm beenden?"-Frage,
aber oftmals macht der Knopf einfach garnichts. (Handy neu starten und danach vielleicht wieder)

philipp.hofmann 28. Feb 2024 21:48

AW: versehentliches Beenden einer Android App
 
Bei FMX wird unter Windows bei einem Terminate von außen auch die OnCloseQuery aufgerufen, aber trotzdem wird die App dann beendet, sprich eine Rückfrage sieht man an der Stelle nur noch, kann sie aber nicht mehr beantworten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:01 Uhr.
Seite 1 von 2  1 2      

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