http://technet.microsoft.com/zh-cn/subscriptions/jj720573.aspx#BKMK_Step6GetthefilefromtheSDcard
适用于:仅限于 Windows Phone 8。
Windows Phone 应用可以使用 Microsoft.Phone.Storage API 读取 SD 卡中的特定文件类型。若要读取文件,您的应用必须在应用清单文件中注册文件关联,并声明它能处理的文件类型(扩展)。因为文件关联是必需的,所以也可以启动您的应用来处理不在 SD 卡上的文件。有关文件关联的更多信息,请参见使用 Windows Phone 8 文件和 URI 关联的自动启动应用。
本主题所述的代码来自路由映射器示例。该示例演示处理文件关联和读取 SD 卡的主要步骤。
注意: |
---|
路由映射器示例读取 GPX 文件中的路由,并在地图控件上显示它们。它可以从 SD 卡和文件关联中读取 GPX 文件。使用一个页面 RoutePage.xaml 处理这两种情况。若要读取 SD 卡中 GPX 文件,MainPage.xaml 通过启动该页面的 URI 将通向该文件的路径发送至 RoutePage.xaml。有关更多信息,请参见示例。 |
本主题包含以下各节。
若要处理特定的文件类型,则注册文件关联扩展。在 WMAppManifest.xml 中指定扩展。在Tokens元素之后,在Extensions元素内,使用以下FileTypeAssociation元素指定文件关联扩展。
<FileTypeAssociation TaskID="_default" Name="GPX" NavUriFragment="fileToken=%s"> <Logos> <Logo Size="small" IsRelative="true">Assets/Route_Mapper_Logo33x33.png</Logo> <Logo Size="medium" IsRelative="true">Assets/Route_Mapper_Logo69x69.png</Logo> <Logo Size="large" IsRelative="true">Assets/Route_Mapper_Logo176x176.png</Logo> </Logos> <SupportedFileTypes> <FileType ContentType="application/gpx">.gpx</FileType> </SupportedFileTypes> </FileTypeAssociation>
Windows Phone 清单设计器不支持Extensions元素。有关编辑扩展的更多信息,请参见如何修改 Windows Phone 的应用清单文件。
因为需要文件关联才能读取 SD 卡中的特定文件类型,因此可以启动您的应用来处理不在 SD 卡上的文件。若要处理这些方案,则添加自定义 URI 映射器,以便将文件关联的标记传递至正确的页面。此代码来自示例的 CustomURIMapper.cs 文件。
在本例中,当文件关联启动应用时,URI 映射器将传入的 URI 映射至名为 RoutePage.xaml 的页面,并将fileToken值传递至目标页面,以便该页面可以打开文件。如果应用因为任何其他原因而启动,则映射器按原始状态返回传入的 URI。
以下代码显示在 App.xaml.cs 文件的InitializePhoneApplication方法中,如何将 URI 映射器分配给App对象。
启动页面时,通过使用页面的 NavigationContext 对象的 QueryString 属性,页面可以访问 URI(启动了该页面)中的所有参数。以下示例显示如何从 URI 中提取fileToken参数的值,然后将其分配给变量使用。此代码来自示例的 RoutePage.xaml.cs 文件。
使用名为sdFilePath的参数将 SD 卡上的文件的路径由 MainPage.xaml 传递至 RoutePage.xaml。步骤 6 涵盖该代码。
在应用启动 URI 中,文件关联包含标记fileToken,可以用它访问正在启动的文件。如上一步骤所显示的,将该标记从 URI 映射器复制到页面,以便该页面可以访问文件。使用文件之前,先用CopySharedFileAsync 将文件复制到您的应用的本地文件夹。如果您想在复制文件之前访问文件名称,则可以调用页面或 URI 映射器中的 GetSharedFileName方法。在示例的 RoutePage.xaml 中,ProcessExternalGPXFile方法使用该标记将文件复制到应用的本地文件夹。
本例所示的ReadGPXFile方法处理路由数据,并在地图控件上绘制它。有关使用应用中的地图的更多信息,请参见 Windows Phone 8 地图和导航。
路由映射器示例将 SD 卡功能分为两个独立部分:扫描 SD 卡和打开 Path 中的文件。在以下代码中,应用扫描 SD 卡的 GPX 文件,并将它们的文件路径保存至名为Routes的 ObservableCollection<T>。在 MainPage.xaml 中,Routes与名为gpxFilesListBox的 ListBox 绑定,以便应用可以显示 SD 卡上的 GPX 文件的名称。
当用户点按在gpxFilesListBox中显示的 GPX 文件时,MainPage.xaml 启动 RoutePage.xaml,并将文件路径作为 URI 参数来传递。因为gpxFilesListBox与Routes绑定,Routes是 ExternalStorageFile 类型,所以可以使用gpxFilesListBox_SelectionChanged_1事件处理程序返回的sender参数来访问 SD 卡文件路径。创建 URI 时访问 Path,如下所示。
最后,在 RoutePage.xaml 上,ProcessSDGPXFile方法使用该路径获取 SD 卡上的文件,而且针对ReadGPXFiles方法打开指向它的流。
有关ReadGPXFiles如何在地图控件上显示路由的更多信息,请下载路由映射器示例。