在
Application
Android清单的节点确保添加了文件提供程序定义:
<provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.FileProvider" android:exported="false" android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths" />
</provider>
添加一个
Resources/xml/provider_paths
包含以下内容的文件:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
</paths>
如果需要,您可以在以后限制此操作。然而,对于我的用例,我将文件放在外部存储器中,从中共享。你需要相应地调整你的分享来源。
也就是说,如果您要从内部应用程序存储中共享文件,则需要添加
files-path
这里也有定义。
然后,在共享文件时,只需执行以下操作:
var packageName = context.ApplicationInfo.PackageName;
var fileProviderName = $"{packageName}.FileProvider";
var intent = new Intent(Intent.ActionSend);
intent.AddFlags(ActivityFlags.GrantReadUriPermission);
intent.SetType("image/*"); // change mime type if wanting to open in other app
intent.PutExtra(Intent.ExtraStream,
FileProvider.GetUriForFile(context, fileProviderName, new Java.IO.File(filePath)));
StartActivity(intent);
这应该足够了,每次我都可以将图片分享到其他应用程序。我认为你不需要为你的选择者准备旗帜
Intent
,只适用于内部
viewIntent
.还有
GrantReadUriPermission
如果你提供旗帜,这应该是唯一需要的东西。