MAUI应用在Android 9(API 28)与Android 15(API 35)上Documents文件夹路径不一致问题求助
MAUI应用在Android 9(API 28)与Android 15(API 35)上Documents文件夹路径不一致问题求助
大家好,我最近在测试MAUI应用时碰到了一个跨Android版本的路径问题,卡了好一阵,想请教下社区的朋友们怎么解决。
问题背景
我先是在Android 15(API 35)上开发调试代码,一切正常后把APK装到自己的Android 9(Galaxy S8+)老手机上,结果发现加载/保存JSON文件时出了问题。于是我在Visual Studio里新建了Android 9的模拟器,给代码加了日志排查,终于找到了问题的根源——不同Android版本返回的Documents文件夹路径不一样,而且Android 9的路径根本无效。
相关代码片段
这是我用来保存文件并输出日志的代码:
FileSaverResult? savedFile; using var memoryStream = new MemoryStream(); savedFile = await _fileSaver.SaveAsync(Path.GetDirectoryName(fullPath), Path.GetFileName(fullPath), memoryStream, cancellationToken); memoryStream.Dispose(); if (savedFile == default || !savedFile.IsSuccessful || savedFile.FilePath == default) return; DiagnosticsUtility.WriteLine($" --- Picked save file is : {savedFile.FilePath}"); DiagnosticsUtility.WriteLine($" --- File exist ? {File.Exists(savedFile.FilePath)}"); DiagnosticsUtility.WriteLine($" --- Directory exist ? {Directory.Exists(Path.GetDirectoryName(savedFile.FilePath))}");
不同Android版本的日志对比
Android 15(API 35)运行日志
--- Picked save file is : /storage/emulated/0/Documents/LotoRelease/Loto.json --- File exist ? True --- Directory exist ? True
Android 9(API 28)运行日志
--- Picked save file is : /storage/home/LotoRelease/Loto.json --- File exist ? False --- Directory exist ? False
核心问题点
- Android 9返回的Documents文件夹路径是
/storage/home,但这个路径对应的文件和目录都不存在,完全无效; - 但如果我选择Download文件夹,两个Android版本返回的都是
/storage/emulated/0/Download,文件和目录都正常存在,操作也没问题。
我的需求与疑问
- 我希望用户能自由选择任意文件夹来保存/加载文件,而不是只能限制在Download文件夹,不想通过硬编码把
/home替换成/emulated/0/Documents这种方式解决,有没有更通用、更优雅的方案? - 另外也想搞清楚
/storage/home这个路径到底是什么,我在谷歌上搜了/storage/home + Android,但完全没找到相关结果,有点摸不着头脑。
内容来源于stack exchange




