如何获取 Xamarin.Forms 中嵌入文件的 URL/路径

2024-03-14

我无法访问 Xamarin.Forms 项目中嵌入的 .mp4 文件。根据Xamarin.Forms 中的文件处理 https://learn.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/files?tabs=vswin文件说,

每个平台上文件的路径可以从 .NET 确定 标准库通过使用值Environment.SpecialFolder枚举作为第一个参数Environment.GetFolderPath方法。然后可以将其与文件名组合Path.Combine method.

我还按照页面上的说明进行操作,告诉您确保将文件的“构建操作”设置为“EmbeddedResource”。最终我试图获取文件的路径/url,以便我可以将其传递到媒体管理器 https://github.com/martijn00/XamarinMediaManager's 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”的文件夹中,该文件夹直接位于“Signing”项目中。我尝试调整文件路径,使其只是文件,只是文件和视频文件夹,并且我尝试使用“/”而不是“。”来分隔目录。我总是得到的打印输出是该文件不存在。在 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 中嵌入文件并稍后检索其文件路径?


您需要将程序集嵌入资源复制到临时文件中,以便 MediaManager 播放它。

Using Xamarin.Essentials您可以获取操作系统的缓存目录,然后将资源复制到其中并通过file:// url.

Example:

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));

Note:就我个人而言,我不会使用嵌入式资源,因为它们会使您的程序集(或本机库中的 .text 段)膨胀,从而消耗应用程序内存,导致加载时间变慢等......,但使用基于本机捆绑包/资产的文件并将它们复制到缓存目录。您可以使用 Xamarin.Essentials 通过以下方式获取这些只读捆绑/资产文件OpenAppPackageFileAsync并使用该流将文件复制到缓存目录。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取 Xamarin.Forms 中嵌入文件的 URL/路径 的相关文章

  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • Android Studio - Windows 7 上的 Android SDK 问题

    我对 Google i o 2013 上发布的最新开发工具 Android Studio 有疑问 我已经成功安装了该程序并且能够正常启动 我可以导入现有项目并对其进行编辑 但是 当我尝试单击 SDK 管理器图标或 AVD 管理器图标时 或者
  • 我的设备突然没有显示在“Android 设备选择器”中

    我正在使用我的三星 Galaxy3 设备来测试过去两个月的应用程序 它运行良好 但从今天早上开始 当我将设备连接到系统时 它突然没有显示在 Android 设备选择器 窗口中 我检查过 USB 调试模式仅在我的设备中处于选中状态 谁能猜出问
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 如何根据 gradle 风格设置变量

    我想传递一个变量test我为每种风格设置了不同的值作为 NDK 的定义 但出于某种原因 他总是忽略了最后味道的价值 这是 build gradle apply plugin com android library def test andr
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 增加活动的屏幕亮度

    显然 Android 操作系统中至少有三种不同的技术可以改变屏幕亮度 其中两个在纸杯蛋糕之后不再起作用 而第三个被接受的技术显然有一个错误 我想在单视图活动开始时增加屏幕亮度 然后在活动结束时将亮度恢复为用户设置 没有按钮 没有第二个视图或
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 使用日期 Swift 3 对字典数组进行排序

    我有一个名为 myArray 的数组 其中添加了字典 我希望该字典按时间排序 这是字典中的键 那个时间是在 String 中 时间的日期格式为 yyyy MM dd HH mm ss 我尝试使用下面的代码解决方案 但给出了 从 字符串转换
  • 如何确定对手机号码的呼叫是本地呼叫还是 STD 或 ISD

    我正在为 Android 开发某种应用程序 但不知道如何获取被叫号码是本地或 STD 的号码的数据 即手机号码检查器等应用程序从哪里获取数据 注意 我说的是手机号码 而不是固定电话 固定电话号码 你得到的数字是字符串类型 因此 您可以获取号
  • 上传存档错误:“缺少 iOS 发行版签名身份......”

    我正在尝试使用 Xcode 将我的 iOS 应用程序存档上传到 iTunes Connect 但是当我单击 上传到 App Store 时 出现错误 Xcode 尝试查找或生成匹配的签名资产并 由于以下问题未能做到这一点 缺少 iOS 为
  • 将 Intent 包装在 LabeledIntent 中以用于显示目的

    要求 我的应用程序中有一个 共享 按钮 我需要通过 Facebook 分享 我需要选择是否安装原生 Facebook 应用程序 我们的决定是 如果未安装该应用程序 则将用户发送到 facebook com 进行分享 当前状态 我可以检测何时
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • 如何在 UITableView 的 switch 语句中创建变量?

    我正在构建一个包含三个部分的 tableView 我已经完成了前两个工作 但最后一个有点阻力 我的问题似乎涉及尝试在 switch 语句中声明变量 实际上是嵌套的 switch 语句 据我所知 这不是一个好主意 但在这种情况下 这似乎是唯一
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写

随机推荐