Einzelnen Beitrag anzeigen

QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.929 Beiträge
 
Delphi 12 Athens
 
#8

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

  Alt 17. Jan 2024, 11:42
Ich benutze das hier um Dateien (Logs der App) mit Gmail "mailto" zu teilen...
Es funktioniert irgendwie nur mit GMail...ich glaube es geht nicht nicht mit whatsapp...
Auf jedenfall
-Baue ich die Fileprovider URL anders zusammen
-Ich setze einen Mime type damit er nicht versucht es zu öffnen...bei dir wäre aber vielleicht 'text/html' angemessen.
-Ich setzte Read permissions
Vielleicht hilft es wenn du mit den 3 sachen bei dir im Projekt etwas spielst....
Ich habe das auch nur durch wildes ausprobieren und raten ans laufen bekommen.

Delphi-Quellcode:
Class procedure TFileProviderService.SendFileToChooser(file_name: string);
{$IFDEF ANDROID}
var
  content,id:String;
  theFile: JFile;
  Intent: JIntent;
  FileURI:JNet_URI;
  ParcelURI:JParcelable;
{$ENDIF}
begin
{$IFDEF ANDROID}

  if System.SysUtils.TOSVersion.Check(7) then
  Begin
    theFile := TJFile.JavaClass.init(StringToJString(file_name));
    FileURI := TAndroidHelper.JFileToJURI(theFile);
    ParcelURI := JParcelable(FileURI);

    Intent := TJIntent.Create;
    Intent.setAction(TJIntent.JavaClass.ACTION_SEND);
    Intent.setDataAndType(fileuri,StringtoJstring('application/*'));
    Intent.PutExtra(TJIntent.JavaClass.EXTRA_STREAM, ParcelURI);
    Intent.SetFlags(TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION);
    //depricated// SharedActivity.startActivity(TJIntent.JavaClass.createChooser(intent, StrToJCharSequence ('Share With')));
    TAndroidHelper.Activity.startActivity(TJIntent.JavaClass.createChooser(intent, StrToJCharSequence ('Share With')));
  End
  else
  Begin
    theFile := TJFile.JavaClass.init(StringToJString(file_name));

    id := JStringToString( TAndroidHelper.Context.getApplicationContext.getPackageName ) + '.fileprovider';
    content := 'content://' + id + '/root' + JStringToString( theFile.getCanonicalPath );

    FileURI := TJnet_Uri.JavaClass.parse(StringtoJString(content));
    ParcelURI := JParcelable(FileURI);

    Intent := TJIntent.Create;
    Intent.setAction(TJIntent.JavaClass.ACTION_SEND);
    Intent.addFlags(TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION);
    Intent.PutExtra(TJIntent.JavaClass.EXTRA_STREAM, ParcelURI);
    Intent.setDataAndType(fileuri,StringtoJstring('application/*'));
    //depricated// SharedActivity.startActivity(TJIntent.JavaClass.createChooser(intent, StrToJCharSequence ('Share With')));
    TAndroidHelper.Activity.startActivity(TJIntent.JavaClass.createChooser(intent, StrToJCharSequence ('Share With')));
  End;
{$ENDIF}
end;
Ist das nicht schön wie einfach und leicht nachvollziehbar es ist eine Datei zu teilen oder ein Dokument zu öffnen?
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty (17. Jan 2024 um 11:48 Uhr)
  Mit Zitat antworten Zitat