Я хочу редактировать файлы из внутреннего хранилища моего приложения Xamarin.Forms для Android в сторонних приложениях, например заполнять элементы формы в файле PDF или редактировать файл .docx.
В моей реализации файл правильно открывается во внешнем приложении, но в некоторых приложениях он открывается только для чтения. Adobe Acrobat и Microsoft Word открывают файлы только для чтения, в то время как другие приложения, такие как Google Docs, могут выполнять обратную запись в файл. (Я использую Microsoft Word с действующей подпиской на Office365).
Мой FileProvider в AndroidManifest.xml:
<provider android:name="android.support.v4.content.FileProvider"
android:authorities="xamarintestapp.xamarintestapp.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
пути к файлам.xml:
<paths>
<files-path name="files" path="."/>
</paths>
Через Xamarin.Forms DependencyService я запускаю действие и передаю содержимое uri для запуска внешнего приложения:
public void OpenFile(string fileName)
{
string auth = "xamarintestapp.xamarintestapp.fileprovider";
string mimeType = Android.Webkit.MimeTypeMap.Singleton.GetMimeTypeFromExtension(Android.Webkit.MimeTypeMap.GetFileExtensionFromUrl(fileName.ToLower()));
if (mimeType == null)
mimeType = "*/*";
var file = new Java.IO.File(Path.Combine(Forms.Context.FilesDir.Path, fileName));
Android.Net.Uri uri = FileProvider.GetUriForFile(Forms.Context, auth, file);
Intent intent = new Intent(Intent.ActionView);
intent.SetDataAndType(uri, mimeType);
intent.AddFlags(ActivityFlags.GrantReadUriPermission | ActivityFlags.GrantWriteUriPermission);
intent.AddFlags(ActivityFlags.NewTask | ActivityFlags.NoHistory);
// Trying to allow writing to the external app ...
var resInfoList = Forms.Context.PackageManager.QueryIntentActivities(intent, PackageInfoFlags.MatchDefaultOnly);
foreach (var resolveInfo in resInfoList)
{
var packageName = resolveInfo.ActivityInfo.PackageName;
Forms.Context.GrantUriPermission(packageName, uri, ActivityFlags.GrantWriteUriPermission | ActivityFlags.GrantPrefixUriPermission | ActivityFlags.GrantReadUriPermission);
}
Forms.Context.StartActivity(intent);
}
Я что-то не так делаю или это просто невозможно?
Forms.Context.StartActivity(intent);
, вы на самом деле разрабатываете решение Xamarin.Forms, а не Xamarin.Android, я прав? И ваша проблема связана с разрешением на запись на других платформах, таких как UWP, а не на платформе Android? - person Grace Feng   schedule 16.02.2017