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

已发布邮件的唯一发布 ID。

属性

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

注解

可以发布同一消息类型的多个消息,每个发布都将具有与之关联的唯一 ID。

可以通过将 PublishBinaryMessage 方法返回的发布 ID 传递给 StopPublishingMessage 方法来停止发布消息。

消息将继续发布,直到调用 StopPublishingMessage 方法或释放 ProximityDevice 为止。

可以使用 SubscribeForMessage 方法订阅已发布的消息。

可以使用 PublishMessage 方法将文本消息发布到代理计算机。 可以使用 PublishUriMessage 方法将统一资源标识符 (URI) 发布到准计算机。

重要

邻近 API 不提供身份验证、加密或消息完整性。 请勿使用邻近感应来交换用户敏感信息,例如密码、财务数据、短信、电子邮件、照片或政府 ID 号。

消息类型

有关可以使用 [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

已发布消息的唯一发布 ID。

属性

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

注解

可以发布同一消息类型的多个消息,每个发布都将具有与之关联的唯一 ID。

可以通过将 PublishBinaryMessage) 检索的发布 ID (传递到 StopPublishingMessage 来停止发布消息。

消息将继续发布,直到调用 StopPublishingMessage发布 ProximityDevice 为止。

可以使用 SubscribeForMessage 方法订阅已发布的消息。

可以使用 PublishMessage 方法将文本消息发布到代理计算机。 可以使用 PublishUriMessage 方法将统一资源标识符 (URI) 发布到准计算机。

重要

邻近 API 不提供身份验证、加密和消息完整性。 请勿使用邻近感应来交换用户敏感信息,例如密码、财务数据、短信、电子邮件、照片或政府 ID 号。

消息类型

使用 messageType 参数提供唯一标识已发布消息的标识符,并定义消息的含义和目标订阅者受众。

消息类型值是区分大小写的字符串,由两部分组成: 协议,后跟点 (.) ,后跟 子类型

子类型是一个字符串,其中每个字符可以是字母数字或任何 RFC 3986 定义的有效 URI 字符。 下面是这些字符。

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

子类型长度不得超过 250 个字符。

下面是消息类型的 协议 部分支持的值。

“Windows”协议

消息包含二进制数据。

“WindowsUri”协议

消息数据包含 UTF-16LE 编码字符串,该字符串是统一资源标识符 (URI) 。|

Windows 通过提示用户在配置为该特定 URI 协议的默认值的应用中查看收到的 URI,处理协议为“WindowsUri”的消息。 例如, http:// 在默认 Web 浏览器中打开的 URI。 Windows 会在默认应用中打开 URI,即使另一个应用也订阅了“WindowsUri”。

不要使用此协议调用 PublishBinaryMessage 方法,而是使用 PublishUriMessage 方法。

如果将 URI 发布到未运行 Windows 的计算机,则会根据计算机支持的邻近感应技术自动设置该 URI 的格式。 例如,如果计算机使用 NFC 硬件进行邻近感应,则会将 URI 格式化为 NDEF URI 记录。

如果你正在订阅“WindowsUri”消息,并且你的 Windows 计算机收到针对计算机支持的邻近感应技术设置格式的消息,则 Windows 将读取格式化的消息,并仅返回 URI 作为消息内容。

“WindowsMime”协议

消息数据属于特定的 mime 类型。 例如,如果消息数据是 jpeg 图像,则消息类型为“WindowsMime.image/jpeg”。

Windows 通过提示用户查看收到的 mime 内容来处理“WindowsMime”消息,即使应用也订阅了 mime 内容。

如果将“WindowsMime”消息发布到未运行 Windows 的计算机,消息内容将根据计算机支持的邻近感应技术自动设置格式。 例如,如果计算机使用 NFC 硬件进行邻近感应,则消息内容将格式化为 NDEF Mime 记录。

如果要发布“WindowsMime”消息,则必须始终包含 mime 类型。 如果要订阅“WindowsMime”消息,则若要订阅所有 mime 类型,则可以使用“WindowsMime”而不指定 mime 类型。 如果你订阅特定的 mime 类型,并且你的 Windows 计算机收到一条针对你的计算机支持的邻近感应技术设置格式的消息,则 Windows 将读取格式化的消息,并且仅返回作为消息内容的 mime 内容。 如果订阅所有 mime 类型,则收到的前 256 个字节是 ASCII mime 类型字符串,其余字节是 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。 邻近感应应用 ID 的格式为 <包系列名称>!<应用 ID>。 可以从 Windows.ApplicationModel.Package.Current.Id.FamilyName 属性获取包系列名称。 必须从应用包清单中 Application 元素的 Id 属性复制应用 ID 值。 此消息的示例为“user=default\tWindows\tExample.Proximity.JS_8wekyb3d8bbwe!Proximity.App”。

还可以支持其他应用平台。 有关详细信息,请参阅 AlternateIdentities

“WriteableTag”协议

订阅此消息协议时,如果将可写标记引入邻近,则会收到包含 int32 (little-endian) 指示标记的最大可写大小的邻近消息。 此协议仅对订阅有效。

“配对:蓝牙”协议

Windows 订阅此消息类型以使用邻近感应完成蓝牙配对。 此协议不应在应用中使用。

“NDEF”协议

消息内容是格式正确的 NDEF 记录。 使用 NDEF 作为消息类型的发布内容的基础类型包含在 NDEF 记录中。 NDEF 类型的订阅将订阅所有 NDEF 格式的消息。

“NDEF:ext”协议

消息数据是应用程序定义的 NDEF 记录, (0x04) 的 TNF 字段值。

如果没有正在运行的应用程序已订阅这些事件,则此协议将启动正确配置的应用程序来处理这些事件。 若要指定应用以使用 NDEF:ext 处理特定协议,必须将 Protocol 标记添加到应用清单,以指定将启动应用的 URI。 以下示例演示了相应的清单语法。

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

注意

应用清单中使用的 URI 格式与 NFC 标记上使用的 URI 格式略有不同,清单 URI 使用“”+字符而不是“”字符。 使用上述清单示例激活应用的 NFC 标记上的 URI 是 contoso.com:testapp。

“NDEF:MIME”协议

消息数据是格式正确的 NDEF mime 消息, (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”协议

消息数据是 NFC 论坛定义的类型正确格式的 NDEF 消息, (TNF 字段值0x01) 。此类型的一个示例是“NDEF:wkt。U“,用于已知类型的 URI。 此协议仅适用于订阅,在发布 NDEF 内容时,请使用 NDEF

“NDEF:WriteTag”协议

消息数据应写入 NFC 论坛标准静态标记。 消息数据必须采用正确的 NDEF 格式。 此协议仅对发布有效。

“NDEF:未知”协议

消息数据是非类型化的 NDEF 消息, (0x05) 的 TNF 字段值。此协议仅适用于订阅,在发布 NDEF 内容时,请使用 NDEF

另请参阅

适用于