Einzelnen Beitrag anzeigen

QuickAndDirty

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

Teilen in Android 10 funktioniert. In Android 6 leider nicht. Warum?

  Alt 30. Dez 2020, 12:50
Der Code funktioniert unter Android 10.
Er öffnet den FileChooser und zeigt eine Auswahl an Messenger und Mail Programmen.
Wenn ich googlmail antippe wird die Datei im Anhang des Email Formulars verschickt.

Der Code funktioniert nicht unter Android 6
Er öffnet den Filechooser und zeigt eine Auswahl an Messenger und Mail Programmen.
Wenn ich googlmail oder Sonymail antippe wird der Dateipfad im absender angezeigt aber kein Anhang bereit gestellt,
weil es keine Berechtigung auf den Pfad der Datei gibt.
Außerdem wird der URI pfad als Adressat im Mailprogramm eingetragen....

Im delphi-projekt ist Berechtigung für "Sichere Dateifraigabe" angehakt.
Und es funktioniert ja unter Android 10, also alles notwendige dafür ist getan.

Was muss ich machen damit der Code auch unter Android 6 funktioniert?

Delphi-Quellcode:
unit Android.FileProviderService;

interface
uses
    System.SysUtils
  , System.ioutils
{$IFDEF ANDROID}
  , Androidapi.JNI.Os
  , Androidapi.JNI.GraphicsContentViewText
  , Androidapi.JNI.JavaTypes
  , Androidapi.Helpers
  , Androidapi.JNI.Net
  , Androidapi.JNI.Webkit
  , Androidapi.JNIBridge
{$ENDIF}
  ;

type

TFileProviderService = Class
public
  Class procedure SendFileToChooser(file_name: string);
End;

implementation

Class procedure TFileProviderService.SendFileToChooser(file_name: string);
{$IFDEF ANDROID}
var
  theFile: JFile;
  Intent: JIntent;
  FileURI:JNet_URI;
  ParcelURI:JParcelable;
{$ENDIF}
begin
{$IFDEF ANDROID}
  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);
  SharedActivity.startActivity(TJIntent.JavaClass.createChooser(intent, StrToJCharSequence ('Share With')));
{$ENDIF}
end;
file_name ist quasi:
file_name := TPath.Combine(TPath.GetHomePath, 'logdatei_Email_Kopie.log'); Die Datei existiert und ist nicht geöffnet.
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty (30. Dez 2020 um 12:58 Uhr)
  Mit Zitat antworten Zitat