Документ Word всегда доступен только для чтения при открытии с намерением - PullRequest
9 голосов
/ 24 мая 2019

Я пытаюсь открыть и отредактировать документ Word , расположенный в моем внешнем хранилище в приложении Xamarin.Android с MS-Word с этим кодом:

File wordFile = new File(wordFilePath);
wordFile.SetWritable(true);

FileInfo fileInfo = new FileInfo(wordFilePath);
fileInfo.IsReadOnly = false;

Android.Net.Uri uri = FileProvider.GetUriForFile(Context, Context.PackageName + ".provider", wordFile);

Intent intent = new Intent();
intent.AddFlags(ActivityFlags.NewTask);
intent.AddFlags(ActivityFlags.GrantReadUriPermission);
intent.AddFlags(ActivityFlags.GrantWriteUriPermission);
intent.AddFlags(ActivityFlags.GrantPersistableUriPermission);
intent.SetAction(Intent.ActionView);

intent.SetData(uri);

Context.StartActivity(intent);

Проблема в том, что файл всегда Только для чтения .Когда я открываю документ с помощью любого проводника файлов (например, File Manager Pro), он не доступен только для чтения , и я могу редактировать файл.

Мне не хватает каких-либо разрешений, которые мне нужно установить в моем приложении или FileProvider?

РЕДАКТИРОВАТЬ:

  • Я вошел в систему с моей учетной записью Office в приложении Android Word
  • Использование WPS Office работает просто отлично , поэтому это должно быть особой проблемой с MS-Word
  • с использованием intent.SetAction(Intent.ActionEdit); не имеет значения
  • с использованием intent.SetDataAndType(uri, "application/msword"); не имеет значения
  • аналогичное поведение с использованием Google Docs : ИспользованиеFileExplorer Я могу открыть и редактировать файл.Если я открою файл с помощью Google Docs через свое приложение, я могу отредактировать файл, но если я нажму «Сохранить», приложение попросит меня «Обновить файл до нового формата DOCX» .Затем я могу сохранить файл в новом каталоге.
  • Сочетание ActionView & SetDataAndType, как оно используется в проводнике, не работает либо

, как это

intent.SetAction(Intent.ActionView);
intent.SetDataAndType(uri, "application/vnd.openxmlformats-officedocument.wordprocessingml.document");

Сравнение намерений:

Я использовал приложение Intent Intercept , чтобы сравнить намерение из моего приложения с намерением изПроводник:


Мое приложение (файл Word доступен только для чтения): enter image description here


Проводник (файл Word можно редактировать): enter image description here

  • с использованием MIME-типа из проводника файлов intent.SetDataAndType(uri, "application/vnd.openxmlformats-officedocument.wordprocessingml.document"); не имеет значения
...