Документ Word всегда доступен только для чтения при открытии с намерением

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

нравится

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

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

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


Мое приложение (файл Word доступен только для чтения): введите здесь описание изображения


File-Explorer (файл Word можно редактировать): введите здесь описание изображения

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

person Aiko West    schedule 24.05.2019    source источник
comment
попробуйте использовать Intent.ActionEdit вместо Intent.ActionView   -  person Leo Zhu - MSFT    schedule 27.05.2019
comment
это я уже пробовал, не помогает   -  person Aiko West    schedule 27.05.2019
comment
намерение.SetDataAndType(uri, приложение/msword); установить тип, чтобы попробовать   -  person Leo Zhu - MSFT    schedule 27.05.2019
comment
я тоже пробовал   -  person Aiko West    schedule 27.05.2019
comment
Просто для ясности ... вы пытались заменить SetData() на SetDataAndType() и установить для своего типа MIME действительно длинное значение со второго снимка экрана? (Я не пользователь Xamarin, но я предполагаю, что у них есть SetDataAndType() для соответствия SetData(), как мы делаем в Java/Kotlin). Если вы пробовали это, и это все еще не сработало, вы можете обновить свой вопрос с исправленным кодом и снимками экрана.   -  person CommonsWare    schedule 28.05.2019
comment
да, я упомянул об этом в последнем пункте под скринами   -  person Aiko West    schedule 28.05.2019
comment
но я добавил новую точку в раздел редактирования, чтобы было понятно :)   -  person Aiko West    schedule 28.05.2019
comment
это флаги запуска 1000 0000 против 1300 0000, каким бы ни был 3.   -  person Martin Zeitler    schedule 01.06.2019
comment
Вы можете сослаться на следующее для целей написания - stackoverflow.com/a/10667865/10941112   -  person Saswata    schedule 02.06.2019
comment
@K.Dexter Попробуйте запустить только с intent.SetFlags(ActivityFlags.NewTask); Удалите все вызовы AddFlags. Дайте нам знать, если это поможет.   -  person mmmatey    schedule 02.06.2019
comment
Дублировано. stackoverflow.com/questions/40157389/   -  person SeyyedMojtaba    schedule 03.06.2019
comment
@mmmatey Ваше предложение приводит к ошибке в слове: Не удается открыть файл | Попробуйте сохранить файл на устройстве, а затем открыть его   -  person Aiko West    schedule 03.06.2019
comment
Только что написал техническую документацию, о чем еще узнал: github.com/cryptomator /cryptomator-android/issues/ Microsoft должна решить эту проблему как можно скорее!   -  person Jules    schedule 24.07.2019