Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Wie kann ich die Generierung von provider_paths.xml beeinflussen? (https://www.delphipraxis.net/200190-wie-kann-ich-die-generierung-von-provider_paths-xml-beeinflussen.html)

QuickAndDirty 27. Mär 2019 12:19

Wie kann ich die Generierung von provider_paths.xml beeinflussen?
 
Mein problem ist , dass
die Datei
Android\Debug\provider_paths.xml
immer wieder mit diesem inhalt überschrieben wird
Code:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="." />
</paths>
Ich brauche aber diesen inhalt in der Datei
Code:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
  <!--
  <external-path name="external_files" path="."/>
  <root-path name="root" path="."/>
  <external-files-path name="external_files" path="." />
  <external-path name="external_files" path="Android/data/com.embarcadero.ShareFiletest/files"/>
  -->
  <root-path name="root" path="."/>

</paths>
Wie kann ich dafür sorgen das die Datei nicht überschrieben wird oder der Inhalt so wie ich ihn brauche generiert wird?
gibt es dazu auch eine Template datei wie beim Manifest?

Rollo62 27. Mär 2019 12:28

AW: Wie kann ich die Generierung von provider_paths.xml beeinflussen?
 
Bist Du auf Tokyo oder in Rio unterwegs ?
In Rio braucht man keine Kastri-Permissions mehr.

Ich würde versuchen nach dem Build mit dem PostBuild / PreLink Event eine "CopyFile" Batch-Datei anzustossen.

QuickAndDirty 27. Mär 2019 12:39

AW: Wie kann ich die Generierung von provider_paths.xml beeinflussen?
 
Hm ok man kann die datein im "Bereitstellung"-tab deaktvieren und eine andere einbinden.

QuickAndDirty 27. Mär 2019 12:42

AW: Wie kann ich die Generierung von provider_paths.xml beeinflussen?
 
Zitat:

Zitat von Rollo62 (Beitrag 1428882)
Bist Du auf Tokyo oder in Rio unterwegs ?
In Rio braucht man keine Kastri-Permissions mehr.

Ich würde versuchen nach dem Build mit dem PostBuild / PreLink Event eine "CopyFile" Batch-Datei anzustossen.

Ich brauche kastriFree nur für den FileProvider... denn den habe ich wo anders nicht gefunden.

insgesammt strauchle ich etwas bei dem ganzen File Provider und Canoniclized paths... und so ...
bekomme einfach eine LOG datei nicht geteilt....

Rollo62 27. Mär 2019 12:50

AW: Wie kann ich die Generierung von provider_paths.xml beeinflussen?
 
[QUOTE=QuickAndDirty;1428887]
Zitat:

Zitat von Rollo62 (Beitrag 1428882)
Ich brauche kastriFree nur für den FileProvider... denn den habe ich wo anders nicht gefunden.

Rio legt den aber auch an.
Man muss dann nur in den Entitlements "Secure file sharing" anclicken.

Rollo

QuickAndDirty 27. Mär 2019 15:16

AW: Wie kann ich die Generierung von provider_paths.xml beeinflussen?
 
Ich nutze diese funktion von Kastri free

TJFileProvider.JavaClass.getUriForFile

Wo gibt es die in Delphi RIO ?
BZW. was macht die funktion mit TandroidHelper.Context?
Wenn es nur ein bisschen string verarbeitung ist kann man das vielleicht auch selber machen.

HMM
macht letztendes
'content://'+ID+'/root'+JStringToString(javafile.getCononicalPath);
und verwandelt das in ein JNet_URI ....ding?
wie bekomme ich ein JNET_URI das auf diesem string basiert?

Edit: habs hinbekommen ohne KastriFree

QuickAndDirty 27. Mär 2019 15:53

AW: Wie kann ich die Generierung von provider_paths.xml beeinflussen?
 
OK wenn ich den URI selber aufbaue geht es auch mit der standard provider_paths.xml
Delphi-Quellcode:
unit Android.FileProviderService;

interface
uses
    System.SysUtils
  , System.ioutils
  , Androidapi.JNI.Os
  , Androidapi.JNI.GraphicsContentViewText
  , Androidapi.JNI.JavaTypes
  , Androidapi.Helpers
  , Androidapi.JNI.Net
  , Androidapi.JNI.Webkit
  ;

type
TFileProviderService = Class
public
  Class procedure SendFileViaFileProvideToChooser(file_name: string);
  Class procedure ViewFileViaFileProvider(file_name: string);
End;

implementation

Class procedure TFileProviderService.SendFileViaFileProvideToChooser(file_name: string);
var
  ExtFile,id, content: string;
  mime: JMimeTypeMap;
  ExtToMime: JString;
  Intent: JIntent;
  javafile: JFile;
  FileURI:JNet_URI;
  ParcelURI:JParcelable;
begin

  javafile:=TJFile.JavaClass.init(StringToJString(file_name));
  ExtFile := AnsiLowerCase(StringReplace(TPath.GetExtension(file_name), '.', '',[]));
  mime := TJMimeTypeMap.JavaClass.getSingleton();
  ExtToMime := mime.getMimeTypeFromExtension(StringToJString(ExtFile));

  Intent := TJIntent.Create;
  id := JStringToString( TAndroidHelper.Context.getApplicationContext.getPackageName ) + '.fileprovider';

  content := 'content://' + id + '/root' + Jstringtostring( javafile.getCanonicalPath );
  FileURI := TJnet_Uri.JavaClass.parse(StringtoJString(content));

  Intent.setAction(TJIntent.JavaClass.ACTION_SEND);
  Intent.SetType(ExtToMime);
  ParcelURI := JParcelable(FileURI);
  Intent.PutExtra(TJIntent.JavaClass.EXTRA_STREAM, ParcelURI);
  SharedActivity.startActivity(TJIntent.JavaClass.createChooser(intent, StrToJCharSequence ('Share With')));
end;


Class procedure TFileProviderService.ViewFileViaFileProvider(file_name: string);
var
  ExtFile,id, content: string;
  mime: JMimeTypeMap;
  ExtToMime: JString;
  Intent: JIntent;
  javafile: JFile;
  FileURI:JNet_URI;
begin
  javafile:=TJFile.JavaClass.init(StringToJString(file_name));
  ExtFile := AnsiLowerCase(StringReplace(TPath.GetExtension(file_name), '.', '',[]));
  mime := TJMimeTypeMap.JavaClass.getSingleton();
  ExtToMime := mime.getMimeTypeFromExtension(StringToJString(ExtFile));

  Intent := TJIntent.Create;
  id := JStringToString( TAndroidHelper.Context.getApplicationContext.getPackageName ) + '.fileprovider';

  content := 'content://' + id + '/root' + Jstringtostring( javafile.getCanonicalPath );
  FileURI := TJnet_Uri.JavaClass.parse(StringtoJString(content));

  Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
  Intent.setFlags(1);
  Intent.setDataAndType(FileURI, ExtToMime); //  Intent.setDataAndType(StrToJURI(deger), ExtToMime);
  SharedActivity.startActivity(Intent);
end;

mjustin 27. Mär 2019 15:58

AW: Wie kann ich die Generierung von provider_paths.xml beeinflussen?
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1428902)
Ich nutze diese funktion von Kastri free

TJFileProvider.JavaClass.getUriForFile

Wo gibt es die in Delphi RIO ?
BZW. was macht die funktion mit TandroidHelper.Context?

Da der Sourcecode von Android öffentlich ist, kann man das leicht nachschauen:

https://android.googlesource.com/pla...eProvider.java

Und die Doku dazu auch:

https://developer.android.com/refere...#geturiforfile

QuickAndDirty 29. Mär 2019 13:03

AW: Wie kann ich die Generierung von provider_paths.xml beeinflussen?
 
nochmal getestet...
es geht nur mit der modifizierte provider_paths.xml Datei.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:11 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