AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kein TOpenDialog für Android?

Ein Thema von Rued · begonnen am 14. Mär 2025 · letzter Beitrag vom 17. Mär 2025
Antwort Antwort
Benutzerbild von Rued
Rued
Online

Registriert seit: 14. Mai 2008
Ort: Schleching
90 Beiträge
 
Delphi 12 Athens
 
#1

Kein TOpenDialog für Android?

  Alt 14. Mär 2025, 18:32
Hallo!
Ich hatte aufgrund dieser Ausführungen in der Dokumentation zu DelphiFMX die Hoffnung, dass ich in meine Android-App Open- und SaveDialoge einbauen kann, aber da liege ich wohl falsch.

Jedenfalls wird folgender Code klaglos kompiliert, aber execute exekutiert nichts. Ohne jede Fehlermeldung passiert exakt nichts.
Delphi-Quellcode:
var
SD1:TOpenDialog;
begin
SD1:=TSaveDialog.Create(application);
SD1.InitialDir := TippPfad;
SD1.DefaultExt :='tip';
if SD1.Execute then Memo1.Lines.SavetoFile(SD1.FileName);
SD1.Free;
Rüdiger Droste
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.545 Beiträge
 
Delphi 12 Athens
 
#2

AW: Kein TOpenDialog für Android?

  Alt 14. Mär 2025, 18:36
Nein, da musst Du Dir selber etwas bauen, wobei die Möglichkeiten, Dateien zu öffnen oder zu speichern auf den mobilen Systemen sowieso relativ begrenzt sind (Standard-Verzeichnisse, wie Documents oder Download, etc).
  Mit Zitat antworten Zitat
Benutzerbild von Rued
Rued
Online

Registriert seit: 14. Mai 2008
Ort: Schleching
90 Beiträge
 
Delphi 12 Athens
 
#3

AW: Kein TOpenDialog für Android?

  Alt 14. Mär 2025, 18:44
Nein, da musst Du Dir selber etwas bauen, wobei die Möglichkeiten, Dateien zu öffnen oder zu speichern auf den mobilen Systemen sowieso relativ begrenzt sind (Standard-Verzeichnisse, wie Documents oder Download, etc).
Okay - danke Harry!

Gruß
Rüd
Rüdiger Droste
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.163 Beiträge
 
Delphi 12 Athens
 
#4

AW: Kein TOpenDialog für Android?

  Alt 14. Mär 2025, 19:48
Oder Du musst mal nach SAF - StorageAccessFrameWork - ScopedStorage googlen.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.862 Beiträge
 
Delphi 12 Athens
 
#5

AW: Kein TOpenDialog für Android?

  Alt 14. Mär 2025, 20:48
Das ist ein Beispiel mit einem Button und einem TImage, das ein ausgewähltes Bild anzeigt:
Delphi-Quellcode:
uses
  Androidapi.JNI.GraphicsContentViewText, Androidapi.Helpers, Androidapi.JNI.Net,
  Androidapi.JNI.App, Androidapi.JNI.JavaTypes, Androidapi.JNIBridge, System.Messaging;

procedure OpenAndroidFileDialog;
var
  Intent: JIntent;
begin
  Intent := TJIntent.Create;
  Intent.setType(StringToJString('*/*')); // image/* für Bilder
  Intent.setAction(TJIntent.JavaClass.ACTION_GET_CONTENT);
  TAndroidHelper.Activity.startActivityForResult(Intent, 0);
end;

procedure TForm286.FormCreate(Sender: TObject);
begin
  TMessageManager.DefaultManager.SubscribeToMessage(TMessageResultNotification, HandleActivityMessage);
end;

function OpenFileViaContentResolver(Uri: Jnet_Uri): JInputStream;
begin
  Result := nil;
  if Uri <> nil then
  begin
    Result := TAndroidHelper.Context.getContentResolver.openInputStream(Uri);
    if Result = nil then
      ShowMessage('Konnte die Datei nicht öffnen.');
  end;
end;

function JInputStreamToMemoryStream(InputStream: JInputStream): TMemoryStream;
var
  Buffer: TJavaArray<Byte>;
  BytesRead: Integer;
begin
  Result := TMemoryStream.Create;

  Buffer := TJavaArray<Byte>.Create(1024);
  repeat
    BytesRead := InputStream.read(Buffer, 0, Buffer.Length);
    if BytesRead > 0 then
      Result.Write(Buffer.Data^, BytesRead);
  until BytesRead <= 0;

  Result.Position := 0;
end;

procedure TForm286.ShowImageFromUri(Uri: Jnet_Uri);
var
  InputStream: JInputStream;
  Bitmap: TBitmap;
  BitmapStream: TMemoryStream;
begin
  InputStream := OpenFileViaContentResolver(Uri);

  if InputStream <> nil then
  begin
    BitmapStream := JInputStreamToMemoryStream(InputStream);

    try
      Bitmap := TBitmap.Create;
      try
        Bitmap.LoadFromStream(BitmapStream);
        Image1.Bitmap.Assign(Bitmap);
      finally
        Bitmap.Free;
      end;
    finally
      BitmapStream.Free;
    end;
  end
  else
    ShowMessage('Fehler: Bild konnte nicht geöffnet werden.');
end;

procedure TForm286.HandleActivityMessage(const Sender: TObject; const M: TMessage);
var
  IntentData: JIntent;
begin
  if M is TMessageResultNotification then
  begin
    if TMessageResultNotification(M).ResultCode = TJActivity.JavaClass.RESULT_OK then
    begin
      IntentData := JIntent(TMessageResultNotification(M).Value);
      if Assigned(IntentData) then
        ShowImageFromUri(IntentData.getData);
    end;
  end;
end;

procedure TForm286.Button1Click(Sender: TObject);
begin
  OpenAndroidFileDialog;
end;
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Rued
Rued
Online

Registriert seit: 14. Mai 2008
Ort: Schleching
90 Beiträge
 
Delphi 12 Athens
 
#6

AW: Kein TOpenDialog für Android?

  Alt 14. Mär 2025, 21:12
Danke Sebastian, das schaue ich mir morgen mal an.
Rüdiger Droste
  Mit Zitat antworten Zitat
TurboMagic

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

AW: Kein TOpenDialog für Android?

  Alt Gestern, 09:24
Hallo,

ja ScopedStorage ist inzwischen das richtige Stichwort,
wobei ich damals als ich damit mal was gemacht hatte die Möglichkeit vermisst habe,
eigene Dateitypen zu benutzen. Wenn man also z. B. ein eigenes Binäres Format oder auch
ein Textformat mit eigener Endung für irgendwas benutzt tut man sich evtl. schwer, kommt
aber nicht drumherum, wenn die betreffenden Dateien z. B. im Downloads Ordner liegen
Grüße
TurboMagic
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
774 Beiträge
 
#8

AW: Kein TOpenDialog für Android?

  Alt Gestern, 11:57
wobei ich damals als ich damit mal was gemacht hatte die Möglichkeit vermisst habe,
eigene Dateitypen zu benutzen. Wenn man also z. B. ein eigenes Binäres Format oder auch
ein Textformat mit eigener Endung für irgendwas benutzt tut man sich evtl. schwer, kommt
aber nicht drumherum, wenn die betreffenden Dateien z. B. im Downloads Ordner liegen
Hast du deinen Dateityp im Manifest registriert?
  Mit Zitat antworten Zitat
Benutzerbild von Rued
Rued
Online

Registriert seit: 14. Mai 2008
Ort: Schleching
90 Beiträge
 
Delphi 12 Athens
 
#9

AW: Kein TOpenDialog für Android?

  Alt Heute, 11:57
Vor Sebastians Beitrag hatte ich mir folgende Lösung überlegt und umgesetzt:

In der App können an zwei Stellen Dateien unterschiedlichen Typs gespeichert und geöffnet werden. Für den Speichervorgang kann der Anwender einen Dateinamen über Edit-Feld vergeben. Beim Speichervorgang in einen spezifischen Unter-Ordner im PathDelim über einen Button wird eine spezifische Dateiendung an den Dateinamen angehängt. Beim App-Start werden alle Dateien aus dem spezifischen Ordner mit der spezifischen Dateiendung in eine Combobox eingelesen - Endung wird dabei wieder entfernt -, über deren Change-Routine die Datei geöffnet werden kann. Das Combobox-Einlesen wird nach einem Speichervorgang aktualisiert.

Für meine Zwecke reicht das. Spricht etwas dagegen?
Rüdiger Droste
  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 12:43 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