私は、連絡先情報を保存する可能性を含む Win8 用のアプリに取り組んでいます。私が使用しているサービスは VCard をサポートしているので、それを使用することにしました。それらを正常にダウンロードして保存できますが、自動的に開くだけでは機能しません。ファイルは「正しく」、エクスプローラーから問題なく開くことができます。LaunchFileAsync が機能しない理由はありますか?
コードのダンプは次のとおりです。
private async void SaveContactSelected()
{
IRandomAccessStreamReference img = RandomAccessStreamReference.CreateFromUri(SelectedItem.Image.UriSource);
StorageFile file = await StorageFile.CreateStreamedFileFromUriAsync(SelectedItem.Title.Replace(' ', '_')+".vcf", new Uri(SelectedItem.VCardUrl), img);
var stream = await file.OpenReadAsync();
uint size = Convert.ToUInt32(stream.Size);
IBuffer buffer = await stream.ReadAsync(new Windows.Storage.Streams.Buffer(size), size, InputStreamOptions.None);
if(!stream.CanRead)
{
//TODO: Error handling
return;
}
FileSavePicker savePicker = new FileSavePicker();
savePicker.FileTypeChoices.Add("vcard", new List<string> { ".vcf" });
savePicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
savePicker.SuggestedFileName = SelectedItem.Title.Replace(' ', '_') + ".vcf";
StorageFile saveDestination = await savePicker.PickSaveFileAsync();
if (saveDestination != null)
{
CachedFileManager.DeferUpdates(saveDestination);
await FileIO.WriteBufferAsync(saveDestination, buffer);
FileUpdateStatus status = await CachedFileManager.CompleteUpdatesAsync(file);
if (status == FileUpdateStatus.Complete)
{
bool succ = await Launcher.LaunchFileAsync(saveDestination, new LauncherOptions() { DisplayApplicationPicker=true });
return;
}
else
{
//TODO: Error handling
}
}
}
マニフェストの関連部分のダンプは次のとおりです。
<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="MyApp.App">
<VisualElements DisplayName="MyApp.com" Logo="Assets\Images\Logo.png" SmallLogo="Assets\Images\SmallLogo.png" Description="MyApp.com Description TODO" ForegroundText="dark" BackgroundColor="#464646">
<DefaultTile ShowName="allLogos" WideLogo="Assets\Images\LogoWide.jpg" />
<SplashScreen Image="Assets\Images\SplashScreen.png" BackgroundColor="#FFFFFF" />
<InitialRotationPreference>
<Rotation Preference="landscape" />
</InitialRotationPreference>
</VisualElements>
<Extensions>
<Extension Category="windows.search" />
<Extension Category="windows.fileTypeAssociation">
<FileTypeAssociation Name="vcard">
<DisplayName>V-Card</DisplayName>
<EditFlags OpenIsSafe="true" />
<SupportedFileTypes>
<FileType ContentType="text/x-vcard">.vcf</FileType>
</SupportedFileTypes>
</FileTypeAssociation>
</Extension>
</Extensions>
</Application>
編集:より明確にするためにマニフェストダンプを追加しました。