使用 Environment 访问 Android 特殊文件夹路径
Posted
技术标签:
【中文标题】使用 Environment 访问 Android 特殊文件夹路径【英文标题】:Access the Android Special Folder Path by using Environment 【发布时间】:2019-06-05 04:53:50 【问题描述】:我想将我的日志保存到我可以使用 Windows 资源管理器访问的文件夹中。例如我想在以下路径中创建我的日志
这台电脑\Galaxy A5 (2017)\Phone\android\data\MyApp\files
所以我尝试使用环境变量...我得到诸如
/数据/用户/...
但是在这里我看不到我创建的文件(使用代码我可以访问路径,但我想在资源管理器中看到)。
如何使用代码创建类似上面的路径?
当我尝试这段代码时
var finalPath2 = Android.OS.Environment.GetExternalStoragePublicDirectory
(Android.OS.Environment.DataDirectory.AbsolutePath);
我得到路径“/storage/emulated/0/data”
和
如果我使用代码
var logDirectory =Path.Combine(System.Environment.GetFolderPath
(System.Environment.SpecialFolder.ApplicationData),"logs");
我得到以下路径:
/data/user/0/MyApp/files/.config/logs
和
var logDirectory =Path.Combine(System.Environment.GetFolderPath
(System.Environment.SpecialFolder.MyDocuments),"logs");
“/data/user/0/IM.OneApp.Presentation.Android/files/logs”
但不幸的是,我无法通过资源管理器访问此文件夹....
这台电脑\Galaxy A5 (2017)\Phone\Android\data\MyApp\files
那么如何在c#中通过环境找出这条路径呢?
更新:
当我给出以下硬编码的路径时,它会在我想要的位置创建文件..
logDirectory = "/storage/emulated/0/Android/data/MyApp/files/logs";
是否有任何环境可以创建此路径?我可以结合 2 个环境并进行一些字符串处理以创建此路径。但也许有更简单的方法?
【问题讨论】:
@SushiHangover,我更喜欢保存在我们的应用文件夹中。我正在更新我的问题 @SushiHangover 给定的路径有效(我已经更新了我的问题)我只需要创建这个路径.. 这是公共存储(模拟),因为它在您应用的沙盒之外,而不是私有沙盒应用存储。任何人都可以访问它,就像音乐、下载、电影等一样。如果您可以访问私有应用程序文件存储(即 root 手机),整个 Android 文件系统安全模型就会被破坏 @SushiHangover,当然。我的意思是不通过沙箱将文件保存到文件夹中。但正如您看到的路径,它比“下载”文件夹“更”私密。我希望它现在清楚了。顺便谢谢你的回复.. 【参考方案1】:你正在寻找GetExternalFilesDir
的根,只需传递一个null:
示例:
var externalAppPathNoSec = GetExternalFilesDir(string.Empty).Path;
注意:这是一个基于 Context
的实例方法,您可以通过 Android 应用程序上下文、Activity 等来访问它...(请参阅下面的 Android 上下文文档链接)
共享存储可能并不总是可用,因为用户可以弹出可移动媒体。可以使用 Environment.getExternalStorageState(File) 检查媒体状态。
这些文件没有强制执行安全措施。例如,任何持有 Manifest.permission.WRITE_EXTERNAL_STORAGE 的应用程序都可以写入这些文件。
回复:https://developer.android.com/reference/android/content/Context#getExternalFilesDir(java.lang.String)
【讨论】:
这正是我想要的......我已经给予了许可。非常感谢。【参考方案2】:string docFolder = Path.Combine(System.Environment.GetFolderPath
(System.Environment.SpecialFolder.MyDocuments), "logs");
string libFolder = Path.Combine(docFolder, "/storage/emulated/0/Android/data/MyApp/files/logs");
if (!Directory.Exists(libFolder))
Directory.CreateDirectory(libFolder);
string destinationDatabasePath = Path.Combine(libFolder, "temp.db3");
db.Backup( destinationDatabasePath, "main");
【讨论】:
以上是关于使用 Environment 访问 Android 特殊文件夹路径的主要内容,如果未能解决你的问题,请参考以下文章
Android 如何使用 Environment.getExternalStorageDirectory()
Android中Environment与StatFs获取系统/SDCard存储空间大小
如何使用 adb 将文件复制到可从 PC 访问的 android 目录