![]() |
Android ACTION_GET_CONTENT abbrechen?
Hi,
ich sitze gerade daran meine App an das nun verpflichtende Android-Berechtigungskonzept anzupassen. Daher kann der User jetzt Dateien im Android-Auswahl-Dialog auswählen und diese kopiere ich dann in mein App-Verzeichnis, bevor ich wieder normal weiterarbeiten kann. Die Kopie ist nicht weiter tragisch, wäre später eh passiert. Was mich jetzt noch stört ist, dass ich nicht sehe, wie man den Android-Auswahl-Dialog abbrechen kann, damit es in meiner App weitergeht, aber eben als wäre unter Windows "Abbrechen" im Auswahl-Dialog geklickt worden. Wie kann man den Android-Auswahl-Dialog abbrechen? Aufruf des Android-Auswahl-Dialoges:
Delphi-Quellcode:
Verarbeitung der ausgewählten Datei:uses: FMX.Helpers.Android, Androidapi.JNIBridge,Androidapi.Jni ... TMessageManager.DefaultManager.SubscribeToMessage(TMessageResultNotification, HandleActivityMessageGPXRead); Intent := TJIntent.Create; Intent.setType(StringToJString('*/*')); Intent.setAction(TJIntent.JavaClass.ACTION_GET_CONTENT); MainActivity.startActivityForResult(Intent, 0); ...
Delphi-Quellcode:
Grüße, Philipp
procedure TForm.HandleActivityMessageGPXRead(const Sender: TObject; const M: TMessage);
var Data:JIntent; C: JCursor; I: integer; uri,filename:String; ms: TMemoryStream; fs: TFileStream; jis: JInputStream; b: TJavaArray<Byte>; begin if (M is TMessageResultNotification) then begin data:=TMessageReceivedNotification(M).Value; uri:=JStringToString(Data.getData.toString); C := MainActivity.getContentResolver.query(Data.getData, nil {P}, StringToJString(''),nil, StringToJString('')); C.moveToFirst; for I := 0 to C.getColumnCount - 1 do begin if JStringToString(C.getColumnName(I)) = '_display_name' then begin filename:=JStringToString(C.getString(I)); Break; end; end; if ((not lowercase(filename).endsWith('.gpx')) and (not lowercase(filename).endsWith('.zip'))) then begin message:='The file '+filename+ ' is not a GPX-File.'; exit; end; ms := TMemoryStream.Create(); try jis := TAndroidHelper.Context.getContentResolver.openInputStream(Data.getData); b := TJavaArray<Byte>.Create(jis.available); jis.read(b); ms.Write(b.Data^, b.Length); jis.close; filename:=TFileUtils.adjustDir(eConfigMyExerciseDirectory.text)+filename; ms.saveToFile(filename); finally ms.free(); end; //meine Standard-Verarbeitung für diese Datei: readExerciseFromGPX(btWizardGPXRead,filename); end; end; |
AW: Android ACTION_GET_CONTENT abbrechen?
Was passiert denn, wenn der Benutzer in dem Dialog auf die Android eigene Zurücktaste
am unteren Bildschirmrand klickt? |
AW: Android ACTION_GET_CONTENT abbrechen?
Da passiert original nichts. Ich muss also eine Datei auswählen.
|
AW: Android ACTION_GET_CONTENT abbrechen?
Warum auch immer, mittlerweile funktioniert der Back-Button. Ich musste daher aber jetzt den Code leicht modifizieren und data auf nil abfragen, da genau diese Message jetzt ankommt:
Delphi-Quellcode:
if (M is TMessageResultNotification) then
begin data:=TMessageReceivedNotification(M).Value; if (data=nil) then exit; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 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 by Thomas Breitkreuz