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.