首页 > 解决方案 > Android.OS.Environment...哪个命名空间?

问题描述

我想将一些数据保存到 Anroid 设备的存储(内部/外部)中。我找到了这篇文章,他们在其中获得了带有以下行的外部存储路径:

var sdCardPath = Android.OS.Environment.ExternalStorageDirectory.Path;

看起来很公平。但我的 Visual Studio 说了以下内容:

当前上下文中不存在名称“Android”

所以我一直想知道它Android驻留在哪个命名空间中?我尝试了很多(例如 AutoImport,但这似乎给了我错误的父级;或者按 F1 获取此处建议的文档建议的文档),但没有弄清楚如何让它工作。我必须获得哪个 NuGet-Package 才能获得此功能。还是我做错了什么?

这是 AutoImport 给我的命名空间:

Xamarin.Forms.PlatformConfiguration.Android.OS.Environment.ExternalStorageDirectory.Path;

但后来它告诉我Android没有OS成员。查了一下,发现Xamarin.Forms.PlatformConfiguration.Android里面根本没有成员,所以下面什么都没有。是我的Xamarin.Forms​​贬低了吗?根据我的 NuGet-Packagemanager 的说法,一切都是最新的。

这些是我的项目使用的 NuGet 包:

  1. Xamarin.Essentials
  2. Xamarin.Forms
  3. OxyPlot.Core
  4. OxyPlot.Xamarin.Forms

标签: c#androidxamarinxamarin.formsio

解决方案


只需在此处输入答案,我们就可以关闭此问题...

您尝试做的问题是您需要了解关注点/抽象是分离的。Core 项目被 Android & iOS 项目引用,但 Android & iOS 项目不被 Core 项目引用。示意性地,

Core-->Android & Core-->iOSCore<-x-Android, Core<-x-iOS

这是设计使然,即使您可以让它做您正在尝试的事情,但您不应该这样做。

我们知道 iOS 和 Android SDK 非常不同。因此,为了获取路径/文件名,您必须在下面执行不同的功能。您共享的代码是仅适用于 Android 本地检索路径/文件名的正确方法。

为了使它适用于 iOS 和 Android,Xamarin Forms 为我们提供了一个抽象层,它为我们处理下面的所有事情,并允许我们使用它:

string filePath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); 
var fileName=Path.Combine(filePath,".");

还有许多其他方法可以执行此操作,如此处的Microsoft 官方文档中所示。


推荐阅读