How do I add a File Type Association in a Windows Phone 8.1 app manifest?

不羁岁月 提交于 2019-12-11 01:23:49

问题


I'm trying to access files in the KnownFolders.MusicLibrarywith the following code.

    internal async void Update()
    {
        StorageFolder rootFolder = KnownFolders.MusicLibrary;
        ScanFolder(rootFolder);
    }

    private async void ScanFolder(StorageFolder storageFolder)
    {
        var items = await storageFolder.GetItemsAsync();

        foreach (var item in items)
        {
            if (item is StorageFolder)
            {
                ScanFolder(item as StorageFolder);
            }
            else if (item is StorageFile)
            {
                var fs = new FileStream(item.Path, FileMode.Open, FileAccess.Read);
                < ... snip ... >
            }
        }
    }

I have the MusicLibrary Capability checked so that I can use KnownFolders.MusicLibrary. This doesn't seem to grant me file access to the library though because I get the following error:

+       [System.UnauthorizedAccessException]    

{System.UnauthorizedAccessException: Access to the path 'C:\Data\Users\Public\Music\tmp' is denied.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access)
   at MusicTrackerPhone.Library.<ScanFolder>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>b__3(Object state)}    System.UnauthorizedAccessException

It's not possible to add a FileType Association via the GUI (nor is the node allowed in the xml).

How do I add the needed declarations for my app?

The complete Package.appxmanifest:

<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/2010/manifest" xmlns:m2="http://schemas.microsoft.com/appx/2013/manifest" xmlns:m3="http://schemas.microsoft.com/appx/2014/manifest" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest">
  <Identity Name="aad31163-0d67-49ba-b569-80ff4d773fa0" Publisher="CN=Benjamin" Version="1.0.0.0" />
  <mp:PhoneIdentity PhoneProductId="2e54a5f6-5319-4dd2-9bad-1fe5290a0eeb" PhonePublisherId="1b03f58e-5a39-414f-9324-2cab834debfd" />
  <Properties>
    <DisplayName>MusicTrackerPhone</DisplayName>
    <PublisherDisplayName>Benjamin</PublisherDisplayName>
    <Logo>Assets\StoreLogo.png</Logo>
  </Properties>
  <Prerequisites>
    <OSMinVersion>6.3.1</OSMinVersion>
    <OSMaxVersionTested>6.3.1</OSMaxVersionTested>
  </Prerequisites>
  <Resources>
    <Resource Language="x-generate" />
  </Resources>
  <Applications>
    <Application Id="x2e54a5f6y5319y4dd2y9bady1fe5290a0eebx" Executable="AGHost.exe" EntryPoint="MainPage.xaml">
      <m3:VisualElements DisplayName="MusicTrackerPhone" Square150x150Logo="Assets\SquareTile150x150.png" Square44x44Logo="Assets\Logo.png" Description="MusicTrackerPhone" ForegroundText="light" BackgroundColor="#464646">
        <m3:DefaultTile Square71x71Logo="Assets\SquareTile71x71.png">
        </m3:DefaultTile>
        <m3:SplashScreen Image="Assets\Splashscreen.png" />
      </m3:VisualElements>
      <Extensions>
        <Extension Category="windows.fileTypeAssociation">
          <FileTypeAssociation Name=".mp3">
            <DisplayName>mp3</DisplayName>
            <SupportedFileTypes>
              <FileType ContentType="audio/mp3">.mp3</FileType>
            </SupportedFileTypes>
          </FileTypeAssociation>
        </Extension>
      </Extensions>
    </Application>
  </Applications>
  <Capabilities>
    <Capability Name="musicLibrary" />
    <Capability Name="removableStorage" />
  </Capabilities>
  <Extensions>
    <Extension Category="windows.activatableClass.inProcessServer">
      <InProcessServer>
        <Path>AgHostSvcs.dll</Path>
        <ActivatableClass ActivatableClassId="AgHost.BackgroundTask" ThreadingModel="both" />
      </InProcessServer>
    </Extension>
  </Extensions>
</Package>

回答1:


Strange thing (it concerns only WP8.1 Silverlight), but as I've checked, it is possible to add FileType Associations via xaml editor: right click on package.appxmanifest file, select View code F7. Find section <Extensions> in your <Application (probably just after </m3:VisualElements>) and add the first FileType Association manually:

  </m3:VisualElements>
  <Extensions>
    <Extension Category="windows.fileTypeAssociation">
      <FileTypeAssociation Name=".mp3">
        <DisplayName>mp3</DisplayName>
        <SupportedFileTypes>
          <FileType ContentType="audio/mp3">.mp3</FileType>
        </SupportedFileTypes>
      </FileTypeAssociation>
    </Extension>
    // other extensions
  </Extensions>

Once you add the first, the next FileType Associations you will be able to add via GUI - from now it will be available in Supported Declarations.




回答2:


NO Need to add .mp3 in file association it is reserved and will be ignored. You can access only SD card library not on phone memory.



来源:https://stackoverflow.com/questions/24416244/how-do-i-add-a-file-type-association-in-a-windows-phone-8-1-app-manifest

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!