Как получить все доступные пути хранилищ в формах Xamarin? - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь получить все доступные медиа-файлы - или файлы с указанными c расширениями - на устройстве - либо Android, либо IOS - но я не могу найти способ сделать это, поэтому вместо этого я пытался получить все хранилища устройств, и я буду перебирать их со своим собственным кодом, чтобы получить нужные мне файлы.

Однако я также не могу найти способ получить пути к хранилищам , но я знаю, что я получаю основной путь хранения в Android, используя Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, так что, возможно, я могу сделать интерфейс для того же самого для IOS, но все же, который получает только основное хранилище, а не любые подключенные USB или карты памяти ...

Так что любая помощь будет приветствоваться в любом из подходов. Заранее спасибо.

1 Ответ

0 голосов
/ 06 апреля 2020

Android:

Android группирует файловую систему на два разных типа хранилища: Внутреннее хранилище, Внешнее хранилище.

Внутреннее хранилище: https://docs.microsoft.com/en-us/xamarin/android/platform/files/#working -with-internal-storage

Вы можете использовать System.Environment.GetFolderPath() для извлечения каталога внутреннего хранилища, как показано ниже:

/data/user/0/com.companyname/files

Внешнее хранилище: https://docs.microsoft.com/en-us/xamarin/android/platform/files/external-storage?tabs=windows

Каталог личных внешних файлов будет выглядеть следующим образом:

/storage/emulated/0/Android/data/com.companyname.app/files/

Вы можете получить его через службу зависимостей.

DependencyService: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app- Основы / Служба зависимостей / Введение

Создание интерфейса IExternalStorage:

public interface IExternalStorage
{
    string GetPath();
}

Реализация на Android:

[assembly:Dependency(typeof(AndroidImplementation))]
namespace App.Droid
{
    public class AndroidImplementation: IExternalStorage
    {
        public string GetPath()
        {
           Context context = Android.App.Application.Context;
           var filePath = context.GetExternalFilesDir("");
           return filePath.Path;
        }
    }
}

Тогда вы можете использовать его в Xamarin.Forms:

var folderPath = DependencyService.Get<IExternalStorage>(). GetPath();

IOS:

Каждый iOS Приложение имеет собственный каталог песочницы. https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html

Обычно мы храним данные пользователя в папке «Документы». И мы можем получить доступ к его пути на формах напрямую:

var path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

Обратите внимание: IOS может получить доступ только к фотогалерее и папке iCloud.

Доступ к файловой системе в Xamarin. iOS: https://docs.microsoft.com/en-us/xamarin/ios/app-fundamentals/file-system

...