【问题标题】:Android.OS.Environment... which namespace?Android.OS.Environment...哪个命名空间?
【发布时间】:2020-07-16 00:18:17
【问题描述】:

我想将一些数据保存到 Anroid 设备的存储(内部/外部)中。我找到了this post,他们通过以下行获得了外部存储路径:

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

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

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

所以我一直想知道这个Android 驻留在哪个命名空间中?我尝试了很多(例如 AutoImport,但这似乎给了我错误的父级;或者按 F1 获取文档,如建议的 here),但没有弄清楚如何让它工作。我必须获得哪个 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

【问题讨论】:

  • @Jason 我期待你。开个玩笑:谢谢。原来它被贬低了。我应该删除这个问题还是你发布一个我标记为已接受答案的答案?
  • 你不能使用'string filePath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); var fileName=Path.Combine(filePath,".");'?
  • @Saamer 我可以。我不知道这是可能的,并认为最好像我链接的帖子那样做。但是 Jason 帮助我了解使用您提到的解决方案更容易。
  • var sdCardPath = Android.OS.Environment.ExternalStorageDirectory.Path 适用于原生 android 项目。您使用的是哪个项目的代码?

标签: c# android xamarin xamarin.forms io


【解决方案1】:

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

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

Core-->Android & Core-->iOS 但是 Core<-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 docs here所示。

【讨论】:

    猜你喜欢
    • 2015-05-31
    • 2011-01-29
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    相关资源
    最近更新 更多