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:<blockquote>
The name 'Android' does not exist in the current context</blockquote>
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:
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:<ol><li>
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
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.