You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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,文件和目录都正常存在,操作也没问题。

我的需求与疑问

  1. 我希望用户能自由选择任意文件夹来保存/加载文件,而不是只能限制在Download文件夹,不想通过硬编码把/home替换成/emulated/0/Documents这种方式解决,有没有更通用、更优雅的方案?
  2. 另外也想搞清楚/storage/home这个路径到底是什么,我在谷歌上搜了/storage/home + Android,但完全没找到相关结果,有点摸不着头脑。

内容来源于stack exchange

火山引擎 最新活动