Android.OS.Environment… which namespace?

寵の児 提交于 2020-06-16 03:35:12

问题


I want to save some data to the storage (internal/external) of an Anroid device. I found this post where they got the external storage path with the following line:

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

Seems fair. But my Visual Studio says the following:

The name 'Android' does not exist in the current context

So I've been wondering in which namespace does this Android reside? I tried quite a lot (e.g. AutoImport, but that seems to give me the wrong parent; or pressing F1 for documentation like suggested here) but didnt figure out how to get this to work. Which NuGet- Package do I have to get to obtain this function. Or am I doing something completely wrong?

This is the namespace that AutoImport gives me:

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

but then it tells me that Android has no OS member. And upon checking, I found that Xamarin.Forms.PlatformConfiguration.Android has no members at all, so theres nothing beneath it. Is my Xamarin.Forms depricated? According to my NuGet- Packagemanager, everything is up to date.

These are the NuGet- Packages my project uses:

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

回答1:


Just typing the answer here so we can close this question...

The problem with what you are trying to do is that you need to understand that there is a separation of concerns/abstraction. The Core project is referenced by the Android & iOS projects, but the Android & iOS projects are not referenced by the Core project. Schematically,

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

This is by design, and even though you can make it do what you are trying, you shouldn't.

We know that the iOS & Android SDKs are very different. So in order to get the path/file name, you have to perform different functions underneath. And the code that you shared is the correct way of retrieving the path/file name natively ONLY for Android.

In order to make it work for both iOS & Android, Xamarin Forms provides us with an abstraction layer that takes care of everything underneath for us, and allows us to use this:

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

There's also many other ways of doing this as shown in the official Microsoft docs here.



来源:https://stackoverflow.com/questions/61018488/android-os-environment-which-namespace

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!