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

.NET MAUI Android端写入可被Windows识别的文件问题求助

.NET MAUI Android 无交互写入可访问共享目录解决方案

问题背景

我正尝试在Android设备(三星Galaxy Tab A7 Lite,Android 13)上使用.NET MAUI写入文件,以便轻松传输到Windows电脑查看分析。

当前测试代码可正常读写,但文件存于私有目录(/data/user/0/[com.companyname.appname]/files/test_file.txt),无法在设备“我的文件”或Windows资源管理器中查看。

尝试过的无效方案:

  • 按相关帖子提示存到共享目录,但最终路径仍为应用私有共享目录(/storage/emulated/0/Android/data/[com.companyname.appname]/files/Documents),无法直接访问;
  • 使用.NET MAUI FileSaver,但需要用户交互选择保存位置,不符合无交互随时保存日志到指定目录的需求。

测试代码如下:

string target_file = System.IO.Path.Combine(FileSystem.Current.AppDataDirectory, "test_file.txt");
using (FileStream output_stream = System.IO.File.OpenWrite(target_file))
{
    using (StreamWriter stream_writer = new StreamWriter(output_stream))
    {
        stream_writer.Write("hello, world!");
    }
}

using (FileStream input_stream = System.IO.File.OpenRead(target_file))
{
    using (StreamReader stream_reader = new StreamReader(input_stream))
    {
        var input_text = stream_reader.ReadToEnd();
    }
}

可行解决方案

1. 写入公共外部存储的Downloads目录

Android 13及以上版本,写入公共Downloads目录无需用户交互,且文件可直接在设备“我的文件”和Windows资源管理器中访问。

步骤1:配置Android权限

在Platforms/Android/AndroidManifest.xml中添加权限声明:

<!-- 兼容Android 12及以下版本的写入权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
<!-- Android 13+ 读取媒体文件权限(非必需,但避免潜在权限问题) -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />

步骤2:获取公共Downloads目录路径

通过Android原生API获取标准公共Downloads目录,适配不同设备:

using Android.Content;
using Android.OS;
using Android.Provider;

public string GetPublicDownloadsPath()
{
    var downloadsDir = Android.App.Application.Context.GetExternalFilesDir(Environment.DirectoryDownloads);
    return downloadsDir.AbsolutePath;
}

步骤3:修改代码写入公共目录

替换原有路径为公共Downloads路径,实现无交互写入:

// 获取公共Downloads目录
string publicDir = GetPublicDownloadsPath();
string target_file = Path.Combine(publicDir, "test_file.txt");

// 写入文件
using (FileStream output_stream = File.OpenWrite(target_file))
{
    using (StreamWriter stream_writer = new StreamWriter(output_stream))
    {
        stream_writer.Write("hello, world!");
    }
}

// 读校验(可选)
using (FileStream input_stream = File.OpenRead(target_file))
{
    using (StreamReader stream_reader = new StreamReader(input_stream))
    {
        var input_text = stream_reader.ReadToEnd();
    }
}

2. 关键注意事项

  • Android 13+写入公共Downloads的非媒体文件(如txt),无需运行时权限,系统自动允许;
  • Android 12及以下版本,需在运行时请求WRITE_EXTERNAL_STORAGE权限,可通过.NET MAUI的Permissions类实现;
  • 写入的文件会出现在设备「我的文件→下载」目录,Windows连接设备后可在Internal Storage/Download下找到;
  • 优先使用系统标准公共目录(Downloads、Documents),避免写入根目录,减少权限限制风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:30:39