我正在尝试开发Windows RT设备的应用程序。我目前面临的问题是基于下一个用例场景:
FileOpenPicker
类选择的音频文件。我想将此结构保存在包含所提供信息(标题,艺术家, FullPathToAudio 等)的JSON文件中,并稍后加载该结构。打开现有歌曲后,我想访问音频文件并提供播放按钮。
问题是,当我尝试通过StorageFile.GetFileFromPathAsync(currentSong.FullPathToAudio)
访问该文件时,应用程序关闭。我已检查Package.appxmanifest
文件的 Capabilities 选项卡中的可移动存储框,并为音频文件(MP3)添加了FileTypeAssociation。
Package.AppxManifest文件已更改如下:
<Applications>
<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="JamAid.App">
<m2:VisualElements DisplayName="JamAid" Square150x150Logo="Assets\Logo.png" Square30x30Logo="Assets\SmallLogo.png" Description="JamAid" ForegroundText="light" BackgroundColor="#464646">
<m2:SplashScreen Image="Assets\SplashScreen.png" />
</m2:VisualElements>
<Extensions>
<Extension Category="windows.fileTypeAssociation">
<FileTypeAssociation Name="mpfiles">
<DisplayName>Mp3 Files</DisplayName>
<EditFlags OpenIsSafe="true" />
<SupportedFileTypes>
<FileType ContentType="audio/mp3">.mp3</FileType>
</SupportedFileTypes>
</FileTypeAssociation>
</Extension>
</Extensions>
</Application>
</Applications>
<Capabilities>
<Capability Name="internetClient" />
<Capability Name="removableStorage" />
</Capabilities>
由于用户可能会创建包含大量歌曲的播放列表,因此无法复制应用程序目录或其他可访问位置中的文件...
编辑:我尝试在本地计算机上调试应用程序。现在,它不是仅仅关闭,而是出现以下错误:
发生了'System.UnauthorizedAccessException'类型的异常 mscorlib.dll但未在用户代码中处理
WinRT信息:无法访问指定的文件或文件夹(讠㣯ü)。 该项目不在应用程序可以访问的位置 (包括应用程序数据文件夹,可通过访问的文件夹) StorageApplicationPermissions中的功能和持久性项 列表)。验证文件未标记为系统或隐藏文件 属性。
其他信息:访问被拒绝。
如果存在此异常的处理程序,则程序可能是安全的 继续进行。
答案 0 :(得分:1)
我发现我可以使用此解决方案:http://www.jonathanantoine.com/2012/08/06/keep-access-to-filesfolders-the-user-granted-you/
基本上,人们必须将位置存储在FutureAccessList:
中var picker = new FolderPicker();
picker.FileTypeFilter.Add("*.mp3");
var folder = await picker.PickSingleFolderAsync();
StorageApplicationPermissions.FutureAccessList.AddOrReplace(Token, folder);
使用以下方式取回:
var folder = await StorageApplicationPermissions.FutureAccessList.GetFolderAsync(Token);