Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule wyjaśniono, jak obsługiwać kontrakt udostępniania na pulpicie lub aplikacji platformy uniwersalnej systemu Windows (UWP). Kontrakt udostępniania to prosty sposób szybkiego udostępniania danych , takich jak tekst, linki, zdjęcia i filmy wideo — między aplikacjami. Na przykład użytkownik może chcieć udostępnić stronę internetową znajomym przy użyciu aplikacji sieci społecznościowej lub zapisać link w aplikacji notatek, aby odwoływać się później.
Uwaga / Notatka
Przykłady kodu w tym artykule pochodzą z aplikacji UWP. Aplikacje desktopowe powinny używać IDataTransferManagerInterop. Aby uzyskać więcej informacji i przykłady kodu, zobacz Wyświetlanie obiektów interfejsu użytkownika WinRT, które zależą od coreWindow.
Aby uzyskać dodatkowe informacje na temat udostępniania danych w aplikacjach desktopowych, możesz również zapoznać się z przykładową aplikacją WPF Sharing i Integracją opcji udostępniania w aplikacji systemu Windows.
Konfigurowanie programu obsługi zdarzeń
Dodaj program obsługi zdarzeń DataRequested, który ma być wywoływany za każdym razem, gdy użytkownik wywołuje udostępnianie. Może się to zdarzyć, gdy użytkownik naciągnie kontrolkę w aplikacji (np. przycisk lub polecenie paska aplikacji) lub automatycznie w określonym scenariuszu (jeśli użytkownik zakończy poziom i otrzyma wysoki wynik, na przykład).
DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();
dataTransferManager.DataRequested += DataTransferManager_DataRequested;
Gdy wystąpi zdarzenie DataRequested , aplikacja odbiera obiekt DataRequest . Zawiera on pakiet DataPackage , którego można użyć do udostępnienia zawartości, którą użytkownik chce udostępnić. Musisz podać tytuł i dane do udostępnienia. Opis jest opcjonalny, ale zalecany.
DataRequest request = args.Request;
Wybieranie danych
Możesz udostępniać różne typy danych, w tym:
- Zwykły tekst
- Identyfikatory URI (Uniform Resource Identifiers)
- HTML
- Sformatowany tekst
- Mapy bitowe
- Files
- Niestandardowe dane zdefiniowane przez dewelopera
Obiekt DataPackage może zawierać co najmniej jeden z tych formatów w dowolnej kombinacji. W poniższym przykładzie pokazano udostępnianie tekstu.
request.Data.SetText("Hello world!");
Ustawianie właściwości
Podczas tworzenia pakietów danych do udostępniania można podać różne właściwości, które udostępniają dodatkowe informacje o udostępnianej zawartości. Te właściwości pomagają aplikacjom docelowym poprawić środowisko użytkownika. Na przykład opis pomaga, gdy użytkownik udostępnia zawartość więcej niż jednej aplikacji. Dodanie miniatury podczas udostępniania obrazu lub linku do strony internetowej zawiera odwołanie wizualne do użytkownika. Aby uzyskać więcej informacji, zobacz DataPackagePropertySet.
Ostrzeżenie
Wszystkie właściwości z wyjątkiem tytułu są opcjonalne. Właściwość "title" jest wymagana i musi zostać ustawiona.
request.Data.Properties.Title = "Share Example";
request.Data.Properties.Description = "A demonstration on how to share";
Uruchom interfejs udostępniania
System zapewnia interfejs użytkownika do udostępniania. Aby go uruchomić, wywołaj metodę ShowShareUI .
DataTransferManager.ShowShareUI();
Zarządzanie błędami
W większości przypadków udostępnianie zawartości jest prostym procesem. Jednak zawsze istnieje szansa, że coś nieoczekiwanego może się zdarzyć. Na przykład aplikacja może wymagać od użytkownika wybrania zawartości do udostępniania, ale użytkownik nie wybrał żadnej. Aby obsłużyć te sytuacje, użyj metody FailWithDisplayText , która wyświetli użytkownikowi komunikat, jeśli coś pójdzie nie tak.
Opóźnij udostępnianie delegatom
Czasami może nie mieć sensu przygotować danych, które użytkownik chce udostępnić od razu. Jeśli na przykład aplikacja obsługuje wysyłanie dużego pliku obrazu w kilku różnych możliwych formatach, nieefektywne jest utworzenie wszystkich tych obrazów przed dokonaniem wyboru przez użytkownika.
Aby rozwiązać ten problem, pakiet DataPackage może zawierać delegata — funkcję wywoływaną, gdy aplikacja odbierająca żąda danych. Zalecamy używanie delegata za każdym razem, gdy dane, które użytkownik chce udostępnić, są zasobochłonne.
async void OnDeferredImageRequestedHandler(DataProviderRequest request)
{
// Provide updated bitmap data using delayed rendering
if (this.imageStream != null)
{
DataProviderDeferral deferral = request.GetDeferral();
InMemoryRandomAccessStream inMemoryStream = new InMemoryRandomAccessStream();
// Decode the image.
BitmapDecoder imageDecoder = await BitmapDecoder.CreateAsync(this.imageStream);
// Re-encode the image at 50% width and height.
BitmapEncoder imageEncoder = await BitmapEncoder.CreateForTranscodingAsync(inMemoryStream, imageDecoder);
imageEncoder.BitmapTransform.ScaledWidth = (uint)(imageDecoder.OrientedPixelWidth * 0.5);
imageEncoder.BitmapTransform.ScaledHeight = (uint)(imageDecoder.OrientedPixelHeight * 0.5);
await imageEncoder.FlushAsync();
request.SetData(RandomAccessStreamReference.CreateFromStream(inMemoryStream));
deferral.Complete();
}
}