我有一个错误,我找不到它的原因。生成URI时出错。
我浏览了关于这个主题的几个主题,在这里进行了讨论。但是,错误无法纠正。我想在某个地方有一个错字。我怎样才能找到我错在哪里?
var
files: Tfile;
lIntent: JIntent;
lJRecipient: TJavaObjectArray<JString>;
lURI: Jnet_Uri;
LAuthority: JString;
lJFile: JFile;
lFileName: string;
lFilePath: string;
lFilePathFileName: string;
Surf : TBitmapSurface;
begin
lFileName := Concat('Foto','Code' ,'.jpg') ;
lFilePath := System.IOUtils.TPath.GetPublicPath;
lFilePathFileName := System.IOUtils.Tpath.Combine(lFilePath, lFileName) ;
Surf:=TBitMapSurface.Create;
SaveParams.Quality:=100;
try
Surf.Assign(imResult.Bitmap);
TbitMapCodecManager.SaveToFile(lFilePathFileName, Surf, @SaveParams);
finally
Surf.Free;
end;
lIntent:= TJIntent.Create;
lIntent.setType(StringToJString('message/rfc822'));
lIntent.setAction(TJIntent.JavaClass.ACTION_SEND);
lIntent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
lIntent.putExtra(TJIntent.JavaClass.EXTRA_EMAIL, lJRecipient);
lIntent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString('Text'));
lIntent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString('.....'));
LAuthority := StringToJString(JStringToString(
TAndroidHelper.Context.getApplicationContext.getPackageName)+'.fileprovider');
lJFile:= TJFile.JavaClass.init(StringToJString(lFileName));
lUri := TJFileProvider.JavaClass.getUriForFile(
TAndroidHelper.Context, LAuthority, lJFile);
我已经包括在清单文件中
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.embarcadero.ScanDecoder.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
已创建文件\res\xml\filepaths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="MyFoto" path="."/>
</paths>
我尝试将文件中的路径更改为以下内容。我仍然得到这个错误。
path="."
path="./"
path="files/"
path=".files/"
我哪里做错了?
1条答案
按热度按时间w3nuxt5m1#
@Dave Notage建议了使用FileProvider的正确方法。当您在项目选项的权限列表中启用“安全文件共享”选项时,将自动生成xml清单和提供程序路径。现在起作用了我提供了一个可行的解决方案。