UWP: Nezobrazí se Share UI

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):

image

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();
   });
}

 

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *