Общий доступ в WinRT

156

Программы могут использовать чудо-кнопку "Общий доступ" двумя способами. Я собираюсь продемонстрировать возможность передачи программой данных другим приложениям. Также возможно сделать приложение приемником данных от других приложений, но эта задача намного сложнее. Для нее приложение должно объявить себя приемником (Share Target) в разделе Declarations файла Package.appxmanifest, активизироваться в уникальном состоянии и предоставить специальный пользовательский интерфейс.

Программа может стать поставщиком данных общего доступа, назначая обработчик события для экземпляра DataTransferManager; программа, поставляющая растровое изображение другому приложению, делает это с тем же объектом RandomAccessStreamReference, который используется для копирования растрового изображения в буфер обмена. С методом GetBitmapStream(), уже определенным в MainPage.Share.cs, дополнительный код поддержки чудо-кнопки "Общий доступ" почти тривиален:

public sealed partial class MainPage : Page
{
    // ...

    private void InitializeSharing()
    {
        // ...

        // Подключение к панели Общий доступ для поставки данных
        DataTransferManager.GetForCurrentView().DataRequested += 
            OnDataTransferDataRequested;
    }

    private async void OnDataTransferDataRequested(DataTransferManager sender, 
        DataRequestedEventArgs e)
    {
        DataRequestDeferral deferral = e.Request.GetDeferral();

        // Get a stream reference and hand it over
        RandomAccessStreamReference reference = await GetBitmapStream(bitmap);
        e.Request.Data.SetBitmap(reference);
        e.Request.Data.Properties.Title = "Finger Paint";
        e.Request.Data.Properties.Description = "Поделиться этой картинкой с другим приложением";

        deferral.Complete();
    }
    
    // ...
}

Теперь при выборе пользователем чудо-кнопки "Общий доступ" во время работы FingerPaint вместо панели с предупреждением «This app can't share» появляется панель с надписью «Finger Paint» и «Поделиться этой картинкой с другим приложением». Очевидно, обработчик события DataRequested уже был вызван, и у Windows имеется экземпляр RandomAccessStreamReference, так что на панели "Общий доступ" выводится список приложений, которые могут обращаться к данным растровых изображений. Дальнейшее взаимодействие от программы не требуется, потому что изображение она уже предоставила.

Пройди тесты
Лучший чат для C# программистов