Einzelnen Beitrag anzeigen

fisipjm

Registriert seit: 28. Okt 2013
251 Beiträge
 
#1

Einfachen String als Datei speichern und via Intent an eine APP übergeben

  Alt 15. Jan 2024, 15:57
Hi,

Ich glaub ich stehe heute extrem auf dem Schlauch.
Ich versuche folgendes, aus meiner Sicht einfaches, Vorhaben zu realisieren.

Ich entwickle mit FireMonkey (FMX) eine Android App (eigentlich auch iOS, aber so weit will ich ja noch gar nicht gehen).
In dieser APP habe ich einen einfachen String. In dem String eine kleine HTML Datei.
Das einzige was ich jetzt machen möchte, ist den String zu speichern (von mir aus auch ohne speichern, wüsste aber nicht wie das gehen soll) und die Datei per intent an den Android Öffnen dialog zu übergeben. Aber jedes mal wenn ich eine APP zum öffnen auswähle bekomme ich entweder die Meldung, dass die Datei nicht existiert oder der Zugriff nicht möglich ist.

Ich verwende Delphi 12. Ich entwickle auf Android 14. Ich habe in der Berechtigungsliste die sichere Dateifreigabe aktiviert.
Die Datei provider_paths.xml sieht so aus:

Code:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="internal_private_files" path="."/>
<cache-path name="internal_cache_files" path="."/>
<external-path name="external_public_files" path="."/>
<external-files-path name="external_private_files" path="."/>
<external-cache-path name="external_cache_files" path="."/>
<external-media-path name="external_media_files" path="."/>
</paths>
Mein Code mit dem ich das Versuche sieht so aus

Delphi-Quellcode:
procedure Share;
{$IF DEFINED(ANDROID)}
  procedure OpenHTMLFile(const FilePath: string);
  var
    Intent: JIntent;
    arch: JFile;
    Uri: Jnet_Uri;
  begin
    arch := TJFile.JavaClass.init(StringToJString(FilePath));
    arch.setReadable(true, false);

    if TJBuild_VERSION.JavaClass.SDK_INT >= 24 then
    begin
      Uri := TJcontent_FileProvider.JavaClass.getUriForFile(TAndroidHelper.Context,
        StringToJString(System.Concat(JStringToString(TAndroidHelper.Context.getPackageName), '.fileprovider')), arch);
    end
    else
    begin
      Uri := TJnet_Uri.JavaClass.fromFile(arch);
    end;

    Intent := TJIntent.Create;
    Intent.putExtra(TJIntent.JavaClass.EXTRA_NOT_UNKNOWN_SOURCE, true);
    Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
    Intent.setDataAndType(Uri, StringToJString('text/html'));

    TAndroidHelper.Context.startActivity(Intent);
  end;
{$ENDIF}

var
  Filename: String;
  lHTML: String;
begin
  lHTML:='<HTML><HEAD></HEAD><BODY><h1>Hallo World!</h1></BODY><HTML>'
  Filename := TPath.Combine(TPath.GetPublicPath, 'MyHTML.html');
  TFile.WriteAllText(Filename, lHTML);

{$IF DEFINED(ANDROID)} OpenHTMLFile(Filename); {$ENDIF}
end;
Hat jemand einen hinweis was ich falsch mache?
  Mit Zitat antworten Zitat