Как получить URL / путь к встроенному файлу в Xamarin.Forms - PullRequest
0 голосов
/ 03 октября 2018

У меня проблемы с доступом к файлам .mp4, встроенным в мой проект Xamarin.Forms.В соответствии с документацией Обработка файлов в Xamarin.Forms говорится, что

Путь к файлу на каждой платформе можно определить из библиотеки .NET Standard с помощью значенияперечисления Environment.SpecialFolder в качестве первого аргумента метода Environment.GetFolderPath.Затем его можно объединить с именем файла с помощью метода Path.Combine.

Я также следовал инструкциям на странице, которые говорят вам, чтобы убедиться, что вы установили «Build Action» в «EmbeddedResource».«для файлов.В конечном итоге я пытаюсь получить путь / URL-адрес файла, чтобы я мог передать его в функцию MediaManager CrossMediaManager.Current.Play().Вот некоторый код, который постоянно терпел неудачу, независимо от того, насколько я его настраивал.Большая часть этого была взята непосредственно из документации Xamarin, ссылки на которую приведены выше:

// Gets the path to the video file.
string fileDirectory = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
string file = "Signing.video.banana.mp4";
string pathToFile = Path.Combine(fileDirectory, file);

// Print some info about the file and its directory
System.Diagnostics.Debug.WriteLine(pathToFile);
System.Diagnostics.Debug.WriteLine(File.Exists(pathToFile));

Файл .mp4 находится в папке с именем «video», которая находится непосредственно в проекте «Подписание».Я попытался изменить путь к файлу, чтобы он был только файлом, папкой с файлами и видео, и я попытался использовать «/» вместо «.»отделить каталоги.Распечатка, которую я всегда получаю - файл не существует.Печатный путь всегда выглядит примерно так при запуске его на эмуляторе iOS:

/Users/doug/Library/Developer/CoreSimulator/Devices/FD9E9045-EF6A-4ECA-9192-25CEC0E7C23C/data/Containers/Data/Application/AF92806E-C68F-45ED-814D-C383821F470A/Documents/Signing.video.banana.mp4

Я видел предложения, в которых говорилось о добавлении «file: //» в начало пути к файлу, а такжекак и другие подобные предложения.Ничего не работаетКак встроить файл в Xamarin.Forms, а затем получить его путь к файлу?

1 Ответ

0 голосов
/ 03 октября 2018

Вам потребуется скопировать встроенный ресурс сборки во временный файл, чтобы MediaManager мог его воспроизвести.

Используя Xamarin.Essentials, вы можете получить каталог кэша ОС, а затем скопировать ресурс в него и воспроизвестиэто через file:// url.

Пример:

var cacheFile = Path.Combine(FileSystem.CacheDirectory, "cached.mp4");
if (File.Exists(cacheFile))
    File.Delete(cacheFile);
using (var resource = Assembly.GetExecutingAssembly().GetManifestResourceStream("YourFullEmbeddedResourceResourceID.mp4"))
using (var file = new FileStream(cacheFile, FileMode.Create, FileAccess.Write))
{
    resource.CopyTo(file);
}
await CrossMediaManager.Current.Play(new MediaFile("file://localhost/" + cacheFile, MediaFileType.Video, ResourceAvailability.Local));

Примечание: Лично я бы не использовал встроенные ресурсы, поскольку они раздувают ваши сборки (или сегменты .text).в собственных библиотеках) и, таким образом, потребляют память приложения, вызывают более медленное время загрузки и т. д., но используют собственные файлы, основанные на пакетах / ресурсах, и копируют их в каталог кэша.Вы можете использовать Xamarin.Essentials для получения этих связанных / доступных файлов только для чтения через OpenAppPackageFileAsync и использовать этот поток для копирования файла в каталог кэша.

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