Antes que nada, recuerda que debes crear un archivo xml que contenga las rutas a las que el fileprovider tendrá acceso para crear el URI correspondiente a tu archivo.
quedando asi:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="internal_private_files" path="." />
<cache-path name="internal_cache_files" path="." />
<external-path name="external_public_files" path="." />
<external-files-path name="external_private_files" path="." />
<external-cache-path name="external_cache_files" path="." />
<external-media-path name="external_media_files" path="." />
</paths>
Recuerda también configurar el "remote path" de tu xml en las configuraciones de tu proyecto como "res\xml".
También tu Archivo "AndroidManifest_Template" debe tener la siguiente estructura:
<?xml version="1.0" encoding="utf-8"?>
<!-- BEGIN_INCLUDE(manifest) -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="%package%"
android:versionCode="%versionCode%"
android:versionName="%versionName%"
android:installLocation="%installLocation%">
<uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" />
<%uses-permission%>
<uses-feature android:glEsVersion="0x00020000" android:required="True"/>
<application android
ersistent="%persistent%"
android:restoreAnyVersion="%restoreAnyVersion%"
android:label="%label%"
android:debuggable="%debuggable%"
android:largeHeap="%largeHeap%"
android:icon="%icon%"
android:theme="%theme%"
android:hardwareAccelerated="%hardwareAccelerated%"
android:resizeableActivity="false"
android:requestLegacyExternalStorage="true">
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.ejemplo.TuApp.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>
<%application-meta-data%>
<%uses-libraries%>
<%services%>
<!-- Our activity is a subclass of the built-in NativeActivity framework class.
This will take care of integrating with our NDK code. -->
<activity android:name="com.embarcadero.firemonkey.FMXNativeActivity"
android:label="%activityLabel%"
android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
android:launchMode="singleTask">
<!-- Tell NativeActivity the name of our .so -->
<meta-data android:name="android.app.lib_name"
android:value="%libNameValue%" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<%activity%>
<%receivers%>
</application>
</manifest>
<!-- END_INCLUDE(manifest) -->
Finalmente el uso del fileprovider para el envío de un archivo mediante un intent se ve asi:
(Cabe mencionar que deberás adaptar el código para mandar el archivo vía correo electrónico)
Código Delphi
[-]
procedure EnviarArchivo;
{$IFDEF ANDROID}
var
Log: JFile;
intent: JIntent;
UriLog: JNet_Uri;
Uris: JArrayList;
{$ENDIF}
begin
try
if TFile.Exists(File_Path) then
begin
{$IFDEF ANDROID}
Uris:= TJArrayList.Create;
Log:= TJFile.JavaClass.init(StringToJString(File_Path));
Log.setReadable(True, False);
if TJBuild_VERSION.JavaClass.SDK_INT >= 24 then begin
UriLog:= TJFileProvider.JavaClass.getUriForFile(TAndroidHelper.Context,
StringToJString(System.Concat(JStringToString(TAndroidHelper.Context.getPackageName),
'.fileprovider')), Log);
Uris.add(UriLog);
end else
begin
UriLog:= TJnet_Uri.JavaClass.fromFile(Log);
Uris.add(UriLog);
end;
intent:= TJIntent.Create;
intent.setAction(TJIntent.JavaClass.ACTION_SEND_MULTIPLE);
intent.addFlags(TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION and
TJIntent.JavaClass.FLAG_GRANT_WRITE_URI_PERMISSION);
intent.putParcelableArrayListExtra(TJIntent.JavaClass.EXTRA_STREAM, Uris);
intent.setType(StringToJString('text/plain'));
TAndroidHelper.Activity.startActivity(TJIntent.JavaClass.createChooser(intent,
StrToJCharSequence('Enviar Mediante..')));
{$ENDIF}
end else ShowMessage('No se encontró el Log');
except on E: exception do
begin
EscribirLogExcepciones(E.ClassName +
' Error al tratar de enviar Archivo de Log: ' + E.Message);
end;
end;
end;
El código anterior lo tomé de una app donde el usuario selecciona por qué medio mandar los logs de operación y excepciones. Como te mencioné ya solo sería cuestión tuya adaptarlo para mandar el archivo por correo.