【问题标题】:Read-only Database on SD card of Windows Phone 8Windows Phone 8 SD 卡上的只读数据库
【发布时间】:2013-11-07 02:55:12
【问题描述】:

是否可以从用户保存在 SD 卡上的预定位置的某种形式的数据库文件中读取数据(只读)?

我想允许我的地图应用程序的用户下载地图图块以供离线使用。将其存储为单个文件会更方便,因此认为数据库是最好的。该文件的大小可能约为 8+ GB,其中包含 100,000 个 PNG 平铺图像。系统会指示用户从网络上下载此文件并将其保存到自己的 SD 卡中。

如果可能的话,我认为 SQLite 将是可行的方法。

任何人都知道任何限制?我一直遇到使用 Windows Phone 开发的限制(无法从应用程序保存到 SD 卡,无法将文件附加到电子邮件任务等),所以我想在这次尝试之前先问一下。

【问题讨论】:

  • 目前我还没有找到允许这样做的解决方案。 Windows Phone SDK 的 SQLite 不支持 ExternalStorageFile,因此目前无法用于从 SD 卡中读取。也许有人知道支持 ExternalStorageFile 的 NoSql 类型实现。

标签: database sqlite map windows-phone-8


【解决方案1】:

是的,您可以通过定义您的应用可以打开的特定文件后缀,在 Windows Phone 8 上使用所谓的“文件类型关联”。您可以从手机、SD 卡甚至电子邮件附件中打开任何文件(只读!)。我想一旦您阅读了该文件,您就可以将其复制到应用程序 IsolatedStorage 以供以后安全访问。
详情请见:
http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj206987(v=vs.105).aspx

【讨论】:

  • 很高兴知道,但不是最优雅的解决方案,因为我不想用我的应用程序打开任何 *.sqlite 或 *.db3 文件。但我想我可以注册一个名为 *.my_app 的扩展,这样用户就不会最终尝试用我的应用打开任何旧数据库。数据库文件的大小在 IsolatedStorage 中不太可能令人满意,但我知道你在哪里。感谢您的反馈,我会试一试!
  • 我已经检查了该页面,并且应该可以为您的应用程序注册 *.sqlite 和 *.db3 文件类型。此外,IsolatedStorage 中的内容没有内存上限,您只受手机可用内存的限制..
  • Cheers Martin,但正如之前的评论中提到的 - 我认为最好提供我自己的文件扩展名,这样 Windows Phone 就不会开始允许用户打开任何旧的 *.sqlite 或*.db3 文件与我的应用程序。我假设 Windows Phone 将向用户展示我的应用程序,如果他们单击我已将我的应用程序注册为能够打开的文件类型 = 我相信的用户会感到困惑。
  • 你可以为你的 db 文件注册任何你想要的文件扩展名,除了一些在 MSDN 页面中命名的保留扩展名。
  • 我尚未将此答案标记为正确,因为不幸的是我无法确认它是正确的。如果您可以证明答案,请随时尝试赢得我刚刚添加到另一个概述我的问题的问题 - stackoverflow.com/questions/20324380/…
【解决方案2】:

目前不可能/容易使用现有的数据库解决方案来读取 SD 卡...

不幸的是,我遇到的任何数据库库都没有实现接受ExternalStorageDevice 或流(使用ExternalStorageDevice.GetFileAsync() 提供)作为数据库源的接口。大多数人想要一个文件路径,然后与标准 System.IO 方法一起使用,这些方法被 Windows Phone 阻止访问 SD 卡。

我也尝试过调整各种库,但 Windows Phone 本身存在一个错误,即从ExternalStorageDevice.GetFileAsync() 返回的流无法正确地从文件的第一部分中查找。详情请参阅this question

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    相关资源
    最近更新 更多