В узле Application
вашего Манифеста Android убедитесь, что вы добавили определение FileProvider:
<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
должен быть единственным, что необходимо, если вы предоставляете флаги.