ProximityDevice.PublishBinaryMessage Метод

Определение

Перегрузки

PublishBinaryMessage(String, IBuffer, MessageTransmittedHandler)

Публикует сообщение, содержащее двоичные данные, подписчикам указанного типа сообщения. Указанный обработчик вызывается при передаче сообщения.

PublishBinaryMessage(String, IBuffer)

Публикует для подписчиков указанного типа сообщения сообщение, содержащее двоичные данные.

PublishBinaryMessage(String, IBuffer, MessageTransmittedHandler)

Публикует сообщение, содержащее двоичные данные, подписчикам указанного типа сообщения. Указанный обработчик вызывается при передаче сообщения.

public:
 virtual long long PublishBinaryMessage(Platform::String ^ messageType, IBuffer ^ message, MessageTransmittedHandler ^ messageTransmittedHandler) = PublishBinaryMessage;
/// [Windows.Foundation.Metadata.Overload("PublishBinaryMessageWithCallback")]
long PublishBinaryMessage(winrt::hstring const& messageType, IBuffer const& message, MessageTransmittedHandler const& messageTransmittedHandler);
[Windows.Foundation.Metadata.Overload("PublishBinaryMessageWithCallback")]
public long PublishBinaryMessage(string messageType, IBuffer message, MessageTransmittedHandler messageTransmittedHandler);
function publishBinaryMessage(messageType, message, messageTransmittedHandler)
Public Function PublishBinaryMessage (messageType As String, message As IBuffer, messageTransmittedHandler As MessageTransmittedHandler) As Long

Параметры

messageType
String

Platform::String

winrt::hstring

Тип сообщения для доставки подписчикам.

message
IBuffer

Данные двоичного сообщения, доставляемые подписчикам.

messageTransmittedHandler
MessageTransmittedHandler

Обработчик, вызываемый при передаче сообщения.

Возвращаемое значение

Int64

long long

long

Уникальный идентификатор публикации для опубликованного сообщения.

Атрибуты

Требования к Windows

Возможности приложения
ID_CAP_PROXIMITY [Windows Phone] proximity ID_CAP_PROXIMITY [Windows Phone]

Примеры

Windows.Networking.Proximity.ProximityDevice proximityDevice;

private void PublishLaunchApp()
{
    proximityDevice = Windows.Networking.Proximity.ProximityDevice.GetDefault();

if (proximityDevice != null)
    {
        // The format of the app launch string is: "<args>\tWindows\t<AppName>".
        // The string is tab or null delimited.

        // The <args> string must have at least one character.
        string launchArgs = "user=default";

        // The format of the AppName is: PackageFamilyName!PRAID.
        string praid = "MyAppId"; // The Application Id value from your package.appxmanifest.

        string appName = Windows.ApplicationModel.Package.Current.Id.FamilyName + "!" + praid;

        string launchAppMessage = launchArgs + "\tWindows\t" + appName;

        var dataWriter = new Windows.Storage.Streams.DataWriter();
        dataWriter.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf16LE;
        dataWriter.WriteString(launchAppMessage);
        var launchAppPubId =
        proximityDevice.PublishBinaryMessage(
            "LaunchApp:WriteTag", dataWriter.DetachBuffer(), 
            proximityWriteTagLaunchAppMessageTransmitCallback);
    }
}

private void proximityWriteTagLaunchAppMessageTransmitCallback(
    Windows.Networking.Proximity.ProximityDevice sender,
    long messageId)
{
    // The LaunchApp message has been successfully written to a tag.
}
   Private proximityDevice As Windows.Networking.Proximity.ProximityDevice

   Private Sub PublishLaunchApp()
       proximityDevice = Windows.Networking.Proximity.ProximityDevice.GetDefault()

   If proximityDevice IsNot Nothing Then
           ' The format of the app launch string is: "<args>" & vbTab & "Windows" vbTab & "<AppName>".
           ' The string is tab or null delimited.

           ' The <args> string must have at least one character.
           Dim launchArgs = "user=default"

           ' The format of the AppName is: PackageFamilyName!PRAID.
           Dim praid = "MyAppId" ' The Application Id value from your package.appxmanifest.

           Dim appName = Windows.ApplicationModel.Package.Current.Id.FamilyName & "!" & praid

           Dim launchAppMessage = launchArgs & vbTab & "Windows" & vbTab & appName

           Dim dataWriter = New Windows.Storage.Streams.DataWriter()
           dataWriter.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf16LE
           dataWriter.WriteString(launchAppMessage)
           Dim launchAppPubId =
              proximityDevice.PublishBinaryMessage(
                 "LaunchApp:WriteTag", dataWriter.DetachBuffer(),
                 AddressOf proximityWriteTagLaunchAppMessageTransmitCallback)
       End If
   End Sub

   Private Sub proximityWriteTagLaunchAppMessageTransmitCallback(
       sender As Windows.Networking.Proximity.ProximityDevice,
       messageId As Long)
       ' The LaunchApp message has been successfully written to a tag.
   End Sub

Комментарии

Можно опубликовать несколько сообщений одного типа, и каждая публикация будет иметь уникальный идентификатор, связанный с ним.

Вы можете остановить публикацию сообщения, передав идентификатор публикации, возвращенный методом PublishBinaryMessage , в метод StopPublishingMessage .

Сообщения продолжают публиковаться до вызова метода StopPublishingMessage или до освобождения ProximityDevice .

Вы можете подписаться на опубликованные сообщения с помощью метода SubscribeForMessage .

Для публикации текстового сообщения на прокси-компьютере можно использовать метод PublishMessage . Метод PublishUriMessage можно использовать для публикации универсального кода ресурса (URI) на прокси-компьютере.

Важно!

API близкого взаимодействия не обеспечивают проверку подлинности, шифрование или целостность сообщений. Не используйте близкое расположение для обмена конфиденциальной информацией пользователя, например паролями, финансовыми данными, текстовыми сообщениями, электронной почтой, фотографиями или номерами правительственных идентификаторов.

Типы сообщений

Дополнительные сведения о типах сообщений, которые можно публиковать с помощью метода [PublishBinaryMessage(String, IBuffer, MessageTransmittedHandler), см. в примечаниях в разделе PublishBinaryMessage(String, IBuffer).

См. также раздел

Применяется к

PublishBinaryMessage(String, IBuffer)

Публикует подписчикам указанного типа сообщения сообщение, содержащее двоичные данные.

public:
 virtual long long PublishBinaryMessage(Platform::String ^ messageType, IBuffer ^ message) = PublishBinaryMessage;
/// [Windows.Foundation.Metadata.Overload("PublishBinaryMessage")]
long PublishBinaryMessage(winrt::hstring const& messageType, IBuffer const& message);
[Windows.Foundation.Metadata.Overload("PublishBinaryMessage")]
public long PublishBinaryMessage(string messageType, IBuffer message);
function publishBinaryMessage(messageType, message)
Public Function PublishBinaryMessage (messageType As String, message As IBuffer) As Long

Параметры

messageType
String

Platform::String

winrt::hstring

Тип сообщения для доставки подписчикам.

message
IBuffer

Данные двоичного сообщения, доставляемые подписчикам.

Возвращаемое значение

Int64

long long

long

Уникальный идентификатор публикации для опубликованного сообщения.

Атрибуты

Требования к Windows

Возможности приложения
ID_CAP_PROXIMITY [Windows Phone] proximity ID_CAP_PROXIMITY [Windows Phone]

Примеры

Windows.Networking.Proximity.ProximityDevice proximityDevice;

private void PublishLaunchApp()
{
    proximityDevice = Windows.Networking.Proximity.ProximityDevice.GetDefault();

if (proximityDevice != null)
    {
        // The format of the app launch string is: "<args>\tWindows\t<AppName>".
        // The string is tab or null delimited.

        // The <args> string must have at least one character.
        string launchArgs = "user=default";

        // The format of the AppName is: PackageFamilyName!PRAID.
        string praid = "MyAppId"; // The Application Id value from your package.appxmanifest.

        string appName = Windows.ApplicationModel.Package.Current.Id.FamilyName + "!" + praid;

        string launchAppMessage = launchArgs + "\tWindows\t" + appName;

        var dataWriter = new Windows.Storage.Streams.DataWriter();
        dataWriter.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf16LE;
        dataWriter.WriteString(launchAppMessage);
        var launchAppPubId =
        proximityDevice.PublishBinaryMessage(
            "LaunchApp:WriteTag", dataWriter.DetachBuffer());
    }
}
Private proximityDevice As Windows.Networking.Proximity.ProximityDevice

Private Sub PublishLaunchApp()
    proximityDevice = Windows.Networking.Proximity.ProximityDevice.GetDefault()

If proximityDevice IsNot Nothing Then
        ' The format of the app launch string is: "<args>" & vbTab & "Windows" vbTab & "<AppName>".
        ' The string is tab or null delimited.

        ' The <args> string must have at least one character.
        Dim launchArgs = "user=default"

        ' The format of the AppName is: PackageFamilyName!PRAID.
        Dim praid = "MyAppId" ' The Application Id value from your package.appxmanifest.

        Dim appName = Windows.ApplicationModel.Package.Current.Id.FamilyName & "!" & praid

        Dim launchAppMessage = launchArgs & vbTab & "Windows" & vbTab & appName

        Dim dataWriter = New Windows.Storage.Streams.DataWriter()
        dataWriter.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf16LE
        dataWriter.WriteString(launchAppMessage)
        Dim launchAppPubId =
           proximityDevice.PublishBinaryMessage(
              "LaunchApp:WriteTag", dataWriter.DetachBuffer())
    End If
End Sub

Комментарии

Можно опубликовать несколько сообщений одного типа, и каждая публикация будет иметь уникальный идентификатор, связанный с ним.

Вы можете остановить публикацию сообщения, передав идентификатор публикации (полученный с помощью PublishBinaryMessage) в StopPublishingMessage.

Сообщения продолжают публиковаться до вызова StopPublishingMessage или до освобождения ProximityDevice .

Вы можете подписаться на опубликованные сообщения с помощью метода SubscribeForMessage .

Для публикации текстового сообщения на прокси-компьютере можно использовать метод PublishMessage . Метод PublishUriMessage можно использовать для публикации универсального кода ресурса (URI) на прокси-компьютере.

Важно!

API близкого взаимодействия не обеспечивают проверку подлинности, шифрование и целостность сообщений. Не используйте близкое расположение для обмена конфиденциальными сведениями пользователей, такими как пароли, финансовые данные, текстовые сообщения, электронная почта, фотографии или правительственные идентификационный номер.

Типы сообщений

Параметр messageType используется для предоставления идентификатора, который однозначно идентифицирует опубликованное сообщение, а также определяет значение сообщения и целевую аудиторию подписчиков.

Значения типа сообщения — это строки с учетом регистра, состоящие из двух частей: протокола, за которым следует точка (.) и подтип.

Подтип представляет собой строку символов, в которой каждый символ может быть буквенно-цифровым или любым допустимым символом URI, как определено в RFC 3986. Вот эти символы.

- . _ ~ : / ? # [ ] @ ! $ & ' ( ) * + , ; = %

Длина подтипа не может превышать 250 символов.

Ниже приведены поддерживаемые значения для части протокола типа сообщения.

Протокол "Windows"

Сообщение содержит двоичные данные.

Протокол WindowsUri

Данные сообщения содержат строку в кодировке UTF-16LE, которая является универсальным кодом ресурса (URI).|

Windows обрабатывает сообщения с протоколом "WindowsUri", предлагая пользователю просмотреть полученный URI в приложении, которое настроено по умолчанию для этого протокола URI. Например, http:// URI, открытые в веб-браузере по умолчанию. Windows открывает универсальный код ресурса (URI) в приложении по умолчанию, даже если другое приложение также подписано на "WindowsUri".

Вместо вызова метода PublishBinaryMessage с помощью этого протокола используйте метод PublishUriMessage .

При публикации URI на компьютере, не работающем под управлением Windows, URI автоматически форматируется на основе технологии близкого взаимодействия, которую поддерживает компьютер. Например, если компьютер использует оборудование NFC для близкого взаимодействия, то URI форматируется как запись URI NDEF.

Если вы подписываетесь на сообщение "WindowsUri", а компьютер Windows получает сообщение, отформатированное для технологии близкого взаимодействия, которую поддерживает ваш компьютер, Windows считывает отформатированное сообщение и возвращает в качестве содержимого сообщения только универсальный код ресурса (URI).

Протокол WindowsMime

Данные сообщения относятся к определенному типу mime. Например, если данные сообщения являются изображением jpeg, тип сообщения — "WindowsMime.image/jpeg".

Windows обрабатывает сообщения WindowsMime, предлагая пользователю просмотреть полученное содержимое mime, даже если приложение также подписано на содержимое mime.

При публикации сообщения "WindowsMime" на компьютере, не работающем под управлением Windows, содержимое сообщения автоматически форматируется на основе технологии близкого взаимодействия, которую поддерживает компьютер. Например, если компьютер использует оборудование NFC для обеспечения близости, содержимое сообщения форматируется как запись NDEF Mime.

Если вы публикуете сообщение "WindowsMime", необходимо всегда включать тип mime. Если вы подписываетесь на сообщение "WindowsMime", то для подписки на все типы mime можно использовать "WindowsMime", не указывая тип mime. Если вы подписываетесь на определенный тип mime и ваш компьютер Windows получает сообщение, отформатированное для технологии близкого взаимодействия, поддерживаемой компьютером, Windows считывает отформатированное сообщение и возвращает в качестве содержимого сообщения только его содержимое. Если вы подписываетесь на все типы mime, первые 256 байтов — это строка типа MIME ASCII, а оставшиеся байты — содержимое mime.

Протокол Windows:WriteTag

Это то же самое, что и протокол Windows , за исключением того, что содержимое предназначено для записи в статический тег. Сообщение не передается ни на одно устройство, кроме статического тега, доступного для записи. Этот протокол действителен только для публикаций. Примером этого протокола является "Windows:WriteTag.SampleSubtype".

Протокол WindowsUri:WriteTag

Это то же самое, что и протокол WindowsUri , за исключением того, что содержимое предназначено для записи в статический тег. Сообщение не передается ни на одно устройство, кроме статического тега, доступного для записи. Этот протокол действителен только для публикаций.

Протокол WindowsMime:WriteTag

Это то же самое, что и протокол WindowsMime , за исключением того, что содержимое предназначено для записи в статический тег. Сообщение не передается ни на одно устройство, кроме статического тега, доступного для записи. Этот протокол действителен только для публикаций. Примером этого протокола является WindowsMime:WriteTag.image/jpeg.

Протокол LaunchApp:WriteTag

Записывает тег, который можно использовать для запуска определенного приложения с необязательными параметрами запуска. При публикации сообщения LaunchApp:WriteTag в теге результат при касании этого тега на компьютере будет таким же, как вызов метода PeerFinder.Start и передача параметров запуска. Сообщение должно быть строкой в кодировке UTF-16LE, где значения разделяются символами табуляции или значениями NULL в следующей форме.

<launch arguments>[tab]<app platform 1>[tab]<app name 1>...[tab]<app platform N>[tab]<app name N>

Аргументы запуска являются необязательными. Сообщение может опустить их.

<app platform 1>[tab]<app name 1>...[tab]<app platform N>[tab]<app name N>

Необходимо указать по крайней мере одну платформу и имя приложения. Платформой приложений для компьютера Windows 8 и более поздних версий является Windows. Формат идентификатора приложения близкого взаимодействия — <имя> семейства пакетов!<идентификатор> приложения. Имя семейства пакетов можно получить из свойства Windows.ApplicationModel.Package.Current.Id.FamilyName . Необходимо скопировать значение идентификатора приложения из атрибута Id элемента Application в манифесте пакета приложения. Пример этого сообщения: "user=default\tWindows\tExample.Proximity.JS_8wekyb3d8bbwe! Proximity.App".

Вы также можете поддерживать другие платформы приложений. Дополнительные сведения см. в разделе AlternateIdentities.

Протокол WriteableTag

При подписке на этот протокол сообщений, если доступный для записи тег находится в близком расположении, то получается сообщение близкого взаимодействия, содержащее int32 (маленький байт), указывающий максимальный размер тега, доступный для записи. Этот протокол действителен только для подписок.

Протокол "Связывание:Bluetooth"

Windows подписывается на этот тип сообщения, чтобы завершить связывание Bluetooth с помощью близкого взаимодействия. Этот протокол не предназначен для использования в приложениях.

Протокол "NDEF"

Содержимое сообщения — это правильно отформатированные записи NDEF. Базовый тип содержимого публикации, использующий NDEF в качестве типа сообщения, содержится в записях NDEF. Подписка на тип NDEF подписывается на все сообщения в формате NDEF.

Протокол "NDEF:ext"

Данные сообщения являются определяемыми приложением записями NDEF (значение поля TNF 0x04).

Этот протокол запустит правильно настроенное приложение для обработки этих событий, если нет запущенного приложения, которое уже подписывается на эти события. Чтобы назначить приложение для обработки определенного протокола с помощью NDEF:ext, необходимо добавить тег Protocol в манифест приложения, чтобы указать универсальный код ресурса (URI), который будет запускать приложение. Соответствующий синтаксис манифеста показан в следующем примере.

<Extensions>
  <Extension Category="windows.protocol">
    <Protocol Name="contoso.com+testapp" />
  </Extension>
</Extensions>

Примечание

Формат URI, используемый в манифесте приложения, немного отличается от формата URI, используемого в теге NFC, в том, что URI манифеста использует символ "+", а не символ ":". Универсальный код ресурса (URI) в теге NFC, который активирует приложение с помощью приведенного выше примера манифеста, — contoso.com:testapp.

Протокол NDEF:MIME

Данные сообщения — это сообщение mime NDEF правильного формата (значение поля TNF 0x02). Например, "NDEF:MIME.image/jpeg". Этот протокол применяется только к подпискам. При публикации содержимого NDEF используйте NDEF.

Протокол NDEF:URI

Данные сообщения — это правильно отформатированные сообщения NDEF типа, определенного пространством имен URI (значение поля TNF 0x03). Этот протокол применяется только к подпискам. При публикации содержимого NDEF используйте NDEF. Это означает, что формат данных определяется указанным универсальным кодом ресурса (URI). Примером этого протокола является "NDEF:URI.http://contoso.com/sometype".

Протокол "NDEF:wkt"

Данные сообщения — это правильно отформатированные сообщения NDEF типа, определенного форумом NFC (значение поля TNF 0x01). Пример этого типа — "NDEF:wkt. U" для хорошо известного типа URI. Этот протокол применяется только к подпискам. При публикации содержимого NDEF используйте NDEF.

Протокол NDEF:WriteTag

Данные сообщения должны быть записаны в стандартный статический тег форума NFC. Данные сообщения должны иметь правильный формат NDEF. Этот протокол действителен только для публикаций.

Протокол NDEF:Unknown

Данные сообщения являются нетипизированным сообщением NDEF (значение поля TNF 0x05). Этот протокол применяется только к подпискам. При публикации содержимого NDEF используйте NDEF.

См. также раздел

Применяется к