Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Delphi Teilen in Android 10 funktioniert. In Android 6 leider nicht. Warum? (https://www.delphipraxis.net/206511-teilen-android-10-funktioniert-android-6-leider-nicht-warum.html)

QuickAndDirty 30. Dez 2020 11:50

Teilen in Android 10 funktioniert. In Android 6 leider nicht. Warum?
 
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:
Delphi-Quellcode:
file_name := TPath.Combine(TPath.GetHomePath, 'logdatei_Email_Kopie.log');
Die Datei existiert und ist nicht geöffnet.

beginnerXE1 31. Dez 2020 14:23

AW: Teilen in Android 10 funktioniert. In Android 6 leider nicht. Warum?
 
Hast du die Mail-App vorher einmal gestartet, damit diese Zugriff auf den Speicher erhält?
Laut einigen Internetseiten gab es da ab Android 7 erst Änderungen und vorher kann es zu solchen Problemen kommen, weil sie nicht automatisch danach fragt. Leider finde ich die Quelle dazu gerade nicht mehr.

Hier https://en.delphipraxis.net/topic/13...ll-a-tjintent/ lief die App zwar noch mit Android 6, aber später nicht mehr, weil der FileProvider fehlte. Vielleicht kannst du aber aus der Lösung noch ableiten, warum es dort dann mit beiden Versionen funktionierte.

QuickAndDirty 1. Jan 2021 02:30

AW: Teilen in Android 10 funktioniert. In Android 6 leider nicht. Warum?
 
Mit Android 7-10 geht es. Ich nutze ja den Fileprovider und die sichere Dateifreigabe.
Mit Android 6 geht es nicht...
Ich guck mir noch eben den Link an. Und sag nach den feiertagen bescheid


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz