Android .OS.Environment ... какое пространство имен? - PullRequest
2 голосов
/ 03 апреля 2020

Я хочу сохранить некоторые данные в хранилище (внутреннее / внешнее) устройства Anroid. Я нашел этот пост , где они получили путь к внешнему хранилищу со следующей строкой:

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

Кажется справедливым. Но моя Visual Studio говорит следующее:

Имя 'Android' не существует в текущем контексте

Так что мне было интересно, в каком пространстве имен это делается этот Android проживает? Я довольно много пробовал (например, AutoImport, но, похоже, это неверный родитель или нажатие клавиши F1 для документации, вроде предложенной здесь ), но не понял, как заставить это работать. Какой NuGet-пакет мне нужно получить, чтобы получить эту функцию. Или я делаю что-то совершенно не так?

Это пространство имен, которое 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

1 Ответ

1 голос
/ 07 апреля 2020

Просто введите ответ здесь, чтобы мы могли закрыть этот вопрос ...

Проблема с тем, что вы пытаетесь сделать, заключается в том, что вам нужно понять, что существует разделение интересов / абстракций. На проект 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 здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...