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?