2013-10-07 13 views
8

Ich habe dieses Stück CodeWie man Android-App in Delphi-XE5 Firemonkey-Anwendung zu schließen?

procedure TFormMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean); 
var 
    msg: String; 
begin 
    msg := 'Do you really want to exit?'; 

    if MessageDlg(msg, TMsgDlgType.mtConfirmation, 
    [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], 0) = mrNo then 
    CanClose := False 
    else 
    CanClose := True; { FIXME: don't want to work on Android } 
end; 

Es perfekt auf Windows. Die Anwendung wird geschlossen, wenn ich "Ja" wähle. Die Anwendung schließt jedoch nicht auf Android. Was mache ich falsch?

Antwort

13

Das Schließen der Anwendung, wenn das letzte Formular geschlossen wird, ist eine Windows-Sache. Eine Android App läuft weiter.

Um die App auf Android zu schließen, rufen Sie SharedActivity.finish von der FMX.Helpers.Android Einheit.

+2

Oder die 'FMX.TApplication.Terminate()' Methode, die auch auf Android die Aktivität beendet (und tut das Äquivalent Aktion auf anderen Plattformen). –

+0

@Remy On 'XE7' für mich,' Application.Terminate' gibt zahlreiche Fehlermeldungen in der IDE beim Debuggen auf einem Android-Gerät. –

+0

@JerryDodge: Wie? –

0

Calling Halt schließt auch die Anwendung.

+1

Mit Halt stoppt der Ausführungspfad sofort. Ihr endlich mal in Versuch ... endlich werden Statements nicht aufgerufen. Die OnClose Ihres Formulars wird nicht aufgerufen usw. –

+0

Danke Marcus. Übrigens habe ich SharedActivity.finish in einer Anwendung ausprobiert, in der ich TGuestureManager verwende, es hat die Anwendung nicht geschlossen. Es ist immer noch in der laufenden Anwendungsliste. Außerdem, wenn ich versuche, es zu aktivieren, hängt es. Fehle ich etwas? Wenn ich es im Debugger-Modus ausführen. Ich bekomme Ausnahme in TGuestureManger.Notification Verfahren in der ersten Zeile. –

+0

Haben Sie noch andere Aktivitäten? –

7
uses 
    FMX.Platform.Android; 

procedure TForm2.SpeedButton1Click(Sender: TObject); 
begin 
    MainActivity.finish; 
end; 
1

Ich habe alle Kombinationen ausprobiert.

- SharedActivity.Finish - NOT WORKING FOR ME 
- MainActivity.Finish - NOT WORKING FOR ME 
- Application.MainForm.DisposeOf - NOT WORKING FOR ME 

Dies ist funktioniert bei mir:

FreeAndNil(Application); 
+2

Es ist ein brutaler Weg, um Ihre Anwendung zu töten. – naXa

+0

Stellen Sie sicher, dass FMX.Platform.Android richtig deklariert ist. – Machado

+0

Haben Sie 'FMX.Application.Terminate()' schon probiert? –

Verwandte Themen