我是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等之间有点迷失...... 如果有人有建议,问题,任何可以帮助我的事情,欢迎。 :)
克雷弗克
答案 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");
}
}