You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

安卓Xamarin应用中如何编辑并覆盖存储的Word文档?

解决Xamarin Android中第三方应用编辑内部存储文件无法覆盖的问题

问题原因

你当前直接传递内部存储私有目录的文件路径给Launcher.OpenAsync,第三方应用没有该目录的写入权限,因此只能以只读模式打开文件,编辑后无法覆盖原文件,只能保存副本。

解决方案

通过FileProvider共享文件Uri,并赋予第三方应用读写权限,让其可以直接编辑并覆盖原文件。以下是具体实现步骤:

1. 配置FileProvider(AndroidManifest.xml)

在application标签内添加FileProvider配置,替换com.yourpackage.name为你的应用包名:

<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="com.yourpackage.name.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>

2. 创建共享路径配置文件

在项目的Resources/xml目录下新建file_paths.xml(若xml目录不存在则手动创建),定义需要共享的内部存储MyDocument目录:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 对应内部存储的Files/MyDocument目录 -->
    <files-path name="my_documents" path="MyDocument/" />
</paths>

3. 修改调用第三方应用的代码

使用FileProvider生成可读写的Content Uri,替换原有的文件路径调用方式:

using AndroidX.Core.Content;
using Android.Net;
using Android.Content.PM;

// 获取目标文件对象(假设文件存放在内部存储的MyDocument目录下)
var targetFile = new Java.IO.File(Context.FilesDir, "MyDocument/你的文件名.ext");

// 通过FileProvider生成带权限的Content Uri
var contentUri = FileProvider.GetUriForFile(Context, "com.yourpackage.name.fileprovider", targetFile);

// 构建打开请求并赋予读写权限
var openRequest = new OpenFileRequest("编辑文件", new ReadOnlyFile(contentUri))
{
    Permissions = ActivityFlags.GrantReadUriPermission | ActivityFlags.GrantWriteUriPermission
};

// 启动第三方应用
await Launcher.OpenAsync(openRequest);

注意事项

  • 确保项目已引用Xamarin.AndroidX.Core NuGet包,FileProvider依赖此包。
  • 替换代码中的com.yourpackage.name为你的实际应用包名,与Manifest中的authorities保持一致。
  • 确认第三方应用支持通过Content Uri进行写入操作,多数现代编辑类应用都支持此方式。

内容的提问来源于stack exchange,提问作者abani samal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 09:05:20