共用方式為


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

備註

您可以發佈相同訊息類型的多個訊息,而且每個發行集都會有與其相關聯的唯一標識符。

您可以將 PublishBinaryMess) age 所擷取的發行集標識碼 (傳遞至 StopPublishingMessage,以停止發布訊息。

訊息會繼續發佈,直到 呼叫 StopPublishingMessageProximityDevice 發行為止。

您可以使用 SubscribeForMessage 方法來訂閱已發佈的訊息。

您可以使用 PublishMessage 方法,將文字訊息發佈至代理電腦。 您可以使用 PublishUriMessage 方法,將統一資源標識碼 (URI) 發佈至代理電腦。

重要

鄰近 API 不提供驗證、加密或訊息完整性。 請勿使用鄰近性來交換使用者敏感性資訊,例如密碼、財務數據、簡訊、電子郵件、相片或政府標識符。

訊息類型

您可以使用 messageType 參數來提供可唯一識別已發行訊息的標識碼,也會定義訊息和預定訂閱者對象的意義。

訊息類型值是區分大小寫的字串,由兩個部分組成:通訊 協定,後面接著點 (.) ,後面接著 子類型

子類型是字元字串,其中每個字元可以是英數位元或任何 RFC 3986 所定義的有效 URI 字元。 以下是這些字元。

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

子類型不能超過 250 個字元的長度。

以下是訊息類型之 通訊協定 部分的支援值。

“Windows” 通訊協定

訊息包含二進位數據。

“WindowsUri” 通訊協定

訊息數據包含UTF-16LE編碼字串,這是統一資源標識碼 (URI) 。|

Windows 會提示使用者在應用程式中檢視已接收的 URI,以使用 “WindowsUri” 通訊協定的通訊協定處理訊息,該 URI 設定為該特定 URI 通訊協定的預設值。 例如, http:// 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內容,即使應用程式也訂閱Mime內容,Windows 會處理「WindowsMime」訊息。

如果您將「WindowsMime」訊息發佈至未執行 Windows 的電腦,訊息內容就會根據您的電腦支援的鄰近技術自動格式化。 例如,如果您的電腦使用NFC硬體進行鄰近性,則訊息內容會格式化為NDEF Mime 記錄。

如果您要發佈「WindowsMime」訊息,您一律必須包含mime類型。 如果您要訂閱「WindowsMime」 訊息,則若要訂閱所有 mime 類型,則可以使用 「WindowsMime」 而不指定 mime 類型。 如果您訂閱特定的mime類型,而您的Windows計算機會收到針對計算機支持的鄰近技術格式化的訊息,則Windows 會讀取格式化的訊息,並只傳回mime內容做為訊息內容。 如果您訂閱所有mime類型,收到的前256個字節是ASCIImime類型字串,其餘的位元組則是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 屬性取得套件系列名稱。 您必須從應用程式套件指令清單中 Application 元素的 Id 屬性複製應用程式識別碼值。 此訊息的範例是 “user=default\tWindows\tExample.Proximity.JS_8wekyb3d8bbwe!Proximity.App」。

您也可以支援其他應用程式平臺。 如需詳細資訊,請參閱 AlternateIdentities

“WriteableTag” 通訊協定

訂閱此訊息通訊協定時,如果可寫入的標籤帶入鄰近性,則會收到包含 int32 的鄰近訊息, (小到尾) 指出標記的最大可寫入大小。 此通訊協定僅適用於訂用帳戶。

“Pairing:Bluetooth” 通訊協定

Windows 訂閱此訊息類型,以使用鄰近性完成藍牙配對。 此通訊協定不適用於應用程式中。

“NDEF” 通訊協定

訊息內容的格式正確為 NDEF 記錄。 使用 NDEF 作為訊息類型包含在 NDEF 記錄中之發行集內容的基礎類型。 NDEF 類型的訂用帳戶會訂閱所有 NDEF 格式的訊息。

“NDEF:ext” 通訊協定

訊息數據是應用程式定義的 NDEF 記錄, (TNF 域值0x04) 。

如果沒有已經訂閱這些事件的執行中應用程式,此通訊協定將會啟動已正確設定的應用程式來處理這些事件。 若要指定應用程式以使用 NDEF:ext 處理特定通訊協定,您必須將通訊協定標籤新增至應用程式指令清單,以指定將啟動應用程式的 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” 通訊協定

訊息數據是 URI 命名空間所定義型別 (TNF 域值0x03) 正确格式化的 NDEF 訊息。此通訊協定僅適用於發佈 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:Unknown” 通訊協定

訊息數據是不具類型的 NDEF 訊息, (TNF 域值0x05) 。此通訊協定僅適用於發佈 NDEF 內容時的訂用帳戶,請使用 NDEF

另請參閱

適用於