Aracılığıyla paylaş


Veri paylaşımı

Bu makalede, bir masaüstünde veya Evrensel Windows Platformu (UWP) uygulamasında Paylaşım sözleşmesinin nasıl desteklenip desteklenecil olduğu açıklanmaktadır. Paylaş sözleşmesi metin, bağlantı, fotoğraf ve video gibi verileri uygulamalar arasında hızla paylaşmanın kolay bir yoludur. Örneğin, bir kullanıcı bir sosyal ağ uygulaması kullanarak bir web sayfasını arkadaşlarıyla paylaşmak veya daha sonra başvurmak üzere not uygulamasına bir bağlantı kaydetmek isteyebilir.

Uyarı

Bu makaledeki kod örnekleri UWP uygulamalarından alınıyor. Masaüstü uygulamaları IDataTransferManagerInterop kullanmalıdır. Daha fazla bilgi ve kod örnekleri için bkz. CoreWindow'a bağlı WinRT UI nesnelerini görüntüleme.

Masaüstü uygulamalarında veri paylaşma hakkında ek bilgi için Windows uygulamanızda WPF Paylaşım içerik kaynağı uygulaması örneğine ve Paylaşımı Tümleştir seçeneklerine de başvurabilirsiniz.

Olay işleyicisi ayarlama

Kullanıcı paylaşım işlevini her çağırdığında çağrılacak DataRequested olay işleyicisi ekleyin. Bu durum, kullanıcı uygulamanızdaki bir denetime (düğme veya uygulama çubuğu komutu gibi) dokunduğunda veya belirli bir senaryoda otomatik olarak (örneğin, kullanıcı bir düzeyi tamamladığında ve yüksek puan aldığında) oluşabilir.

DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();
dataTransferManager.DataRequested += DataTransferManager_DataRequested;

DataRequested olayı gerçekleştiğinde, uygulamanız bir DataRequest nesnesi alır. Bu, kullanıcının paylaşmak istediği içeriği sağlamak için kullanabileceğiniz bir DataPackage içerir. Paylaşmak için bir başlık ve veri sağlamanız gerekir. Açıklama isteğe bağlıdır, ancak önerilir.

DataRequest request = args.Request;

Veri seçme

Aşağıdakiler de dahil olmak üzere çeşitli veri türlerini paylaşabilirsiniz:

  • Düz metin
  • Tekdüzen Kaynak Tanımlayıcıları (URI'ler)
  • HTML
  • Biçimlendirilmiş metin
  • Bitmap
  • Dosyalar
  • Özel geliştirici tanımlı veriler

DataPackage nesnesi, herhangi bir bileşimde bu biçimlerden birini veya daha fazlasını içerebilir. Aşağıdaki örnekte metin paylaşımı gösterilmektedir.

request.Data.SetText("Hello world!");

Özellikleri ayarlama

Verileri paylaşmak üzere paketlediğinizde, paylaşılmakta olan içerik hakkında ek bilgi sağlayan çeşitli özellikler sağlayabilirsiniz. Bu özellikler, hedef uygulamaların kullanıcı deneyimini geliştirmesine yardımcı olur. Örneğin, bir açıklama, kullanıcı birden fazla uygulamayla içerik paylaşırken yardımcı olur. Bir görüntüyü veya web sayfasının bağlantısını paylaşırken küçük resim eklemek, kullanıcıya görsel bir başvuru sağlar. Daha fazla bilgi için bkz. DataPackagePropertySet.

Uyarı

Başlık dışındaki tüm özellikler isteğe bağlıdır. Title özelliği zorunludur ve ayarlanmalıdır.

request.Data.Properties.Title = "Share Example";
request.Data.Properties.Description = "A demonstration on how to share";

Paylaşım kullanıcı arabirimini başlatma

Paylaşım için kullanıcı arabirimi sistem tarafından sağlanır. Başlatmak için ShowShareUI yöntemini çağırın.

DataTransferManager.ShowShareUI();

Hatalarla başa çıkma

Çoğu durumda, içerik paylaşmak basit bir işlemdir. Ancak, beklenmedik bir şey olma olasılığı her zaman vardır. Örneğin, uygulama kullanıcının paylaşım için içerik seçmesini gerektirebilir ancak kullanıcı herhangi bir içerik seçmedi. Bu durumları işlemek için FailWithDisplayText yöntemini kullanın. Bu yöntem, bir sorun oluştuğunda kullanıcıya bir ileti görüntüler.

Temsilcilerle paylaşımı geciktirme

Bazen, kullanıcının paylaşmak istediği verileri hemen hazırlamak mantıklı olmayabilir. Örneğin, uygulamanız çeşitli farklı biçimlerde büyük bir görüntü dosyası göndermeyi destekliyorsa, kullanıcı seçimini yapana kadar tüm bu görüntüleri oluşturmak verimsizdir.

Bu sorunu çözmek için DataPackage , alıcı uygulama veri istediğinde çağrılan bir işlev olan bir temsilci içerebilir. Kullanıcının paylaşmak istediği verilerin yoğun kaynak kullanımına sahip olduğu her durumda temsilci kullanmanızı öneririz.

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

Ayrıca bakınız