Tenhle problém dokáže pěkně potrápit. V jedné aplikaci jsem generoval obrázek, spojoval ho s Inkem a následně přes Share contract nabízel ke sdílení třeba do mailové aplikace. V emulátoru i na skutečném telefonu všechno fungovalo, dokud byl připojený debugger, nicméně když jsem aplikaci spustil rovnou ze seznamu, Share UI se nezobrazilo a nevyskočila ani žádná chyba.
Bádání odhalilo, že oba režimy jsou různé v tom, kolik času aplikace dostává, aby dodala balíček, který se sdílí – informace je uložena v DataRequest.Deadline
a liší se výrazně (kód jsem pouštěl včera – 11. 6. 2016):
Podle dokumentace to může být klidně jenom 200 ms. Moje aplikace tedy nestihla dát včas dohromady celý obrázek.
Rychlým řešením je přesunout získání obrázku ještě před vyvolání sdílení:
image = await GetImage(); DataTransferManager.ShowShareUI();
Výše odkazovaná dokumentace ale doporučuje použít metodu SetDataProvider, které předáte delegát metody, která poskytne data:
args.Request.Data.Properties.Description = "Shared drwaing"; args.Request.Data.Properties.Title = "Sdílíme ink"; args.Request.Data.SetDataProvider(StandardDataFormats.Bitmap, renderer);
…
private async void renderer(DataProviderRequest request) { await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () => { var deferral = request.GetDeferral(); request.SetData(await GetImage()); deferral.Complete(); }); }