如何在 Xamarin.Forms 中访问每个平台中的公共下载文件夹

Posted

技术标签:

【中文标题】如何在 Xamarin.Forms 中访问每个平台中的公共下载文件夹【英文标题】:How to access public download folder in every platform in Xamarin.Forms 【发布时间】:2017-01-23 12:24:57 【问题描述】:

我需要创建一个备份服务,所以我打算在每个平台上保存 SQLite 数据库文件。 卸载应用后,保存的文件应该可用

我打算使用 Downloads 文件夹(应该在每个平台上都可用)。

我已经创建了一个接口并在每个平台上使用以下代码:

界面

public interface IBackupService

  string GetDownloadPath();

安卓

public string GetDownloadPath()

  return android.OS.Environment.DirectoryDownloads;

UWP

public string GetDownloadPath()

  return Windows.Storage.KnownFolders.???????;

我该怎么办?有我可以使用的公共图书馆吗?

【问题讨论】:

【参考方案1】:

根据KnownFolders 上的文档,似乎没有通用下载文件夹。因此,您对每个平台上的 Downloads 文件夹的假设似乎并不正确。

如果我们再深入一点,就会看到DocumentsLibrary,这似乎是实现这种目的的明显选择,但事实并非如此。微软说:

文档库不适用于一般用途。如需更多信息, 见App capability declarations。另外,请参阅以下博客文章。 Dealing with Documents: How (not) to use the documentsLibrary capability in Windows Store apps

之后的段落似乎描述了我们接下来要做的事情;

如果您的应用必须创建和更新只有您的应用使用的文件, 考虑使用应用程序的本地文件夹。获取应用程序的本地文件夹 Windows.Storage.ApplicationData.Current.LocalFolder 属性。

因此,我可以从您的问题中提取出您只想为您的应用使用存储空间,因此根据 Microsoft 的说法,Windows.Storage.ApplicationData.Current.LocalFolder 似乎是正确的选择。

【讨论】:

我可能被误解了:我需要在应用程序卸载后拥有该文件。所以使用 LocalFolder 对我来说不是一个好的解决方案。 请注意,在卸载应用程序时留下文件是不好的做法,但如果这确实是您的要求,那么这确实不是解决方案。然后您可以选择使用DocumentsLibrary,毕竟它相当于普通PC 上的“我的文档”文件夹。但请注意微软对其施加的限制。

以上是关于如何在 Xamarin.Forms 中访问每个平台中的公共下载文件夹的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms:如何在 Xamarin.Forms 跨平台项目中开发具有蓝牙连接的应用程序?

如何自定义 Xamarin.Forms 应用程序?

如何在Xamarin Forms中使用SqLite?

如何在 Xamarin.Forms.Map 中获取当前位置或移动到当前位置

如何跨命名空间和平台伪造库(GDI 到 Xamarin.Forms),例如重用 Color 结构

Xamarin Forms 标签不会在 WPF 平台上换行