Я пытаюсь получить все доступные медиа-файлы - или файлы с указанными c расширениями - на устройстве - либо Android, либо IOS - но я не могу найти способ сделать это, поэтому вместо этого я пытался получить все хранилища устройств, и я буду перебирать их со своим собственным кодом, чтобы получить нужные мне файлы.
Однако я также не могу найти способ получить пути к хранилищам , но я знаю, что я получаю основной путь хранения в Android, используя Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, так что, возможно, я могу сделать интерфейс для того же самого для IOS, но все же, который получает только основное хранилище, а не любые подключенные USB или карты памяти ...
Android.OS.Environment.ExternalStorageDirectory.AbsolutePath
Так что любая помощь будет приветствоваться в любом из подходов. Заранее спасибо.
Android:
Android группирует файловую систему на два разных типа хранилища: Внутреннее хранилище, Внешнее хранилище.
Внутреннее хранилище: https://docs.microsoft.com/en-us/xamarin/android/platform/files/#working -with-internal-storage
Вы можете использовать System.Environment.GetFolderPath() для извлечения каталога внутреннего хранилища, как показано ниже:
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