在Unity App for WindowsPhone 8.0中使用关联的应用程序打开PDF文件

时间:2015-11-02 13:58:29

标签: c# windows-phone-8 unity3d

我是WindowsPhone应用程序开发的新手。我目前正在为Windows Phone 8.0开发Unity应用程序。在这个应用程序中,我想使用手机上的相应应用程序打开PDF(Acrobat Reader,Windows Reader等...)

首先,我试过这个:

void PDFButtonToggled(bool i_info)
    {
        Dispatcher.BeginInvoke(() =>
        {
            DefaultLaunch();
        });
    }

    async void DefaultLaunch()
    {
        // Path to the file in the app package to launch
        string PDFFilePath = @"Data/StreamingAssets/ImageTest.jpg";

        var file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(PDFFilePath);

        if (file != null)
        {
            // Set the option to show the picker
            var options = new Windows.System.LauncherOptions();
            options.DisplayApplicationPicker = true;

            // Launch the retrieved file
            bool success = await Windows.System.Launcher.LaunchFileAsync(file, options);
            if (success)
            {
                // File launched
            }
            else
            {
                throw new Exception("File launch failed");
            }
        }
        else
        {
            throw new Exception("Could not find file");
        }
    }

它给我一个例外,所以我搜索了原因。我发现了关于异步函数/线程的主题(2013年编写:/):LINK。为了sumarize,这里是Unity员工的答案:

  

它只适用于Windows应用商店应用,您必须将代码包装在#if NET_FX /#endif中。在其他平台上,您不能在脚本中使用async / .NET 4.5代码。如果你想将它用于windows phone,你必须在单独的visual studio解决方案中编写该代码并将其编译为DLL,因此unity可以将其用作插件。

所以我决定在这里创建Unity手册中描述的双DLL解决方案:LINK。但是当我使用上面给出的“async void DefaultLaunch()”函数完成第一个DLL的类时,我没有关于Windows.ApplicationModel.etc ...和Windows.System.etc ...的引用。

我在这里,WP,Unity,8.0应用程序,StoreApps等之间有点迷失...... 如果有人有建议,问题,任何可以帮助我的事情,欢迎。 :)

克雷弗克

1 个答案:

答案 0 :(得分:0)

我自己找到了一个解决方案,但是在WindowsPhone8.1应用程序上。 这是:

        async void PDFButtonToggled(bool i_info)
    {
        await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
        {
            DefaultLaunchFile();
        });
    }

    async void DefaultLaunchFile()
    {
        StorageFolder dataFolder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("Data");
        StorageFolder streamingAssetsFolder = await dataFolder.GetFolderAsync("StreamingAssets");

        // Path to the file in the app package to launch
        string filePath = "PDFTest.pdf";

        var file = await streamingAssetsFolder.GetFileAsync(filePath);

        if (file != null)
        {

            // Launch the retrieved file
            bool success = await Windows.System.Launcher.LaunchFileAsync(file);
            if (success)
            {
                // File launched
            }
            else
            {
                throw new Exception("File launch failed");
            }
        }
        else
        {
            throw new Exception("File not found");
        }
    }