【问题标题】:Word document is always Read-Only when opened with Intent使用 Intent 打开 Word 文档时始终为只读
【发布时间】:2019-05-24 06:32:42
【问题描述】:

我正在尝试使用 MS-Word 在我的 Xamarin.Android 应用程序的外部存储中打开和编辑一个 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);

问题是,文件总是只读。当我通过 any file explorer(例如 File Manager Pro)打开文档时,它是 not Read-Only,我可以编辑该文件。

我是否缺少任何需要在我的应用程序或 FileProvider 中设置的权限?

编辑:

  • 我在 Android Word 应用中使用我的 Office 帐户登录
  • 使用 WPS Office 工作正常,所以它必须是 MS-Word 的一个特殊问题
  • 使用intent.SetAction(Intent.ActionEdit); 并没有什么不同
  • 使用intent.SetDataAndType(uri, "application/msword"); 并没有什么不同
  • 使用 Google 文档 的类似行为:使用 FileExplorer 我能够打开和编辑文件。如果我通过我的应用使用 Google Docs 打开文件,我可以编辑文件,但如果我点击保存,应用会要求我“将文件更新为新的 DOCX 格式”。然后我可以将文件保存到新目录。
  • 文件资源管理器中使用的ActionViewSetDataAndType 的组合也不起作用

喜欢这个

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

意图比较:

我使用 Intent Intercept App 将我的应用程序的意图与文件浏览器的意图进行比较:


我的应用程序(Word 文件是只读的):


文件浏览器(可以编辑 Word 文件):

  • 使用文件资源管理器中的 MIME 类型 intent.SetDataAndType(uri, "application/vnd.openxmlformats-officedocument.wordprocessingml.document"); 没有区别

【问题讨论】:

  • 尝试使用Intent.ActionEdit而不是Intent.ActionView
  • 我已经试过了,没有帮助
  • intent.SetDataAndType(uri, "application/msword");设置类型试一试
  • 我也试过了
  • 刚刚写了一个技术文档,我还是发现了:github.com/cryptomator/cryptomator-android/issues/…微软必须尽快解决这个问题!

标签: android android-intent ms-word xamarin.android android-internal-storage


【解决方案1】:

如果您使用ActionEdit 而不是ActionView,它似乎可以工作,而不是

intent.AddFlags(ActivityFlags.GrantPersistableUriPermission);

有了这个,我可以打开一个可编辑的 .doc 文件,但是,我无法将文件保存到原始位置(在我的应用程序的沙箱中)。 Word 将始终建议保存副本。在摸索了几天之后,我怀疑这是 Microsoft 设计的,我们的代码没有任何问题,尽管我不能确定...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多