Я пытаюсь открыть и отредактировать документ 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");
не имеет значения
Intent.ActionEdit
вместоIntent.ActionView
- person Leo Zhu - MSFT   schedule 27.05.2019SetData()
наSetDataAndType()
и установить для своего типа MIME действительно длинное значение со второго снимка экрана? (Я не пользователь Xamarin, но я предполагаю, что у них естьSetDataAndType()
для соответствияSetData()
, как мы делаем в Java/Kotlin). Если вы пробовали это, и это все еще не сработало, вы можете обновить свой вопрос с исправленным кодом и снимками экрана. - person CommonsWare   schedule 28.05.20191000 0000
против1300 0000
, каким бы ни был3
. - person Martin Zeitler   schedule 01.06.2019