使用Environment访问Android特殊文件夹路径

Unb*_*ced 6 xamarin.android xamarin

我想将我的日志保存到一个文件夹,我可以使用Windows资源管理器访问该文件夹.例如,我想在以下路径中创建我的日志

这个PC\Galaxy A5(2017)\ Phone\Android\data\MyApp\files

所以我尝试使用环境变量......我得到了如此

/数据/用户/ ...

但是在这里我看不到我创建的文件(使用代码我可以访问路径,但我想在资源管理器中看到).

我如何用代码创建上面的路径?

当我尝试这个代码

var finalPath2 = Android.OS.Environment.GetExternalStoragePublicDirectory
(Android.OS.Environment.DataDirectory.AbsolutePath);
Run Code Online (Sandbox Code Playgroud)

我得到路径"/ storage/emulated/0/data"

如果我使用代码

   var logDirectory =Path.Combine(System.Environment.GetFolderPath
  (System.Environment.SpecialFolder.ApplicationData),"logs");
Run Code Online (Sandbox Code Playgroud)

我得到以下路径:

/data/user/0/MyApp/files/.config/logs

var logDirectory =Path.Combine(System.Environment.GetFolderPath
  (System.Environment.SpecialFolder.MyDocuments),"logs");
Run Code Online (Sandbox Code Playgroud)

"/data/user/0/IM.OneApp.Presentation.Android/files/logs"

但遗憾的是我无法通过资源管理器访问此文件夹....

这个PC\Galaxy A5(2017)\ Phone\Android\data\MyApp\files

那么如何通过使用环境在c#中找到这条路径呢?

更新:

当我给出以下路径硬编码时,它会创建我想要的文件..

logDirectory ="/ storage/emulated/0/Android/data/MyApp/files/logs";

是否有任何创建此路径的环境?我可以组合2个环境并进行一些字符串处理以创建此路径.但也许有一种更简单的方法?

Sus*_*ver 4

您正在寻找 的根GetExternalFilesDir,只需传递一个 null:

例子:

var externalAppPathNoSec = GetExternalFilesDir(string.Empty).Path;
Run Code Online (Sandbox Code Playgroud)

注意:这是一个Context基于实例的方法,您可以通过 Android 应用程序上下文、Activity 等访问它...(请参阅下面的 Android 上下文文档链接)

  • 共享存储可能并不总是可用,因为用户可以弹出可移动介质。可以使用Environment.getExternalStorageState(File)检查媒体状态。

  • 这些文件没有强制执行安全措施。例如,任何持有 Manifest.permission.WRITE_EXTERNAL_STORAGE 的应用程序都可以写入这些文件。

回复:https://developer.android.com/reference/android/content/Context#getExternalFilesDir(java.lang.String)