共用方式為


支援鄰近性和輕觸 (HTML)

[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]

用途

注意  

鄰近性是專為想要透過「輕觸」**將簡單連線納入應用程式的開發人員所設計。例如,在多人遊戲中,兩位使用者同時輕觸裝置即可建立分享的遊戲工作階段。或者,客戶在使用應用程式時輕觸裝置,即可接收到可取得更多資訊或進行購買的位置連結。若要使用輕觸手勢讓兩部裝置進行連線,則兩部裝置都必須具備鄰近性裝置,例如近距離無線通訊 (NFC) 無線電波。

 

您也可以使用對等瀏覽搭配 Wi-Fi Direct,讓兩部執行您應用程式且位於無線範圍內的裝置進行連線。鄰近性和 NFC 可以讓您用簡單的「輕觸」**手勢來連線裝置。當兩部裝置彼此距離在 4 公分的範圍內或是彼此輕觸時,這兩部裝置的作業系統便會感知對方的存在。您也可以將對等瀏覽與 Wi-Fi Direct 搭配使用,在無線範圍內連接兩部正在執行您應用程式的裝置。然後您可以將兩部裝置連線以分享內容,像是分享相片或連結、建立多名玩家遊戲經驗,或是發佈和訂閱訊息。

重要  

裝置必須具備鄰近性裝置 (例如,近距離無線通訊 (NFC) 無線電裝置),才能啟用輕觸連線。裝置必須具備支援 Wi-Fi Direct 的 Wi-Fi 裝置,才能啟用對等瀏覽。

 

在這個章節中

主題 說明

快速入門:使用輕觸或瀏覽的方式連接應用程式

當您使用鄰近性時,可以利用簡單的輕觸手勢或透過瀏覽無線範圍內的裝置,來建立兩個裝置之間的連線。您不需要連線至網路。只要同時輕觸兩部裝置,或使用 Wi-Fi Direct 連接。

快速入門:使用輕觸來發佈和訂閱訊息

利用鄰近性功能,您可以在兩部裝置之間發佈和訂閱訊息,以及使用簡單的點選手勢將靜態標記寫入裝置。如果兩個裝置互相靠近到相距 3 到 4 公分,鄰近性就會通知系統。 這個主題說明如何利用鄰近性功能來發佈或訂閱訊息。

在應用程式中測試和疑難排解鄰近性

這個主題提供的指導方針,可以讓應用程式開發人員在將應用程式提交到市集之前,先測試和疑難排解應用程式中的鄰近性。

 

開發人員對象

鄰近性設計的目標使用者是希望擴大他們應用程式範圍的開發人員,讓使用者能夠在無線範圍內,透過「輕觸」**或是瀏覽正在執行您應用程式或「對等」**應用程式的其他裝置,來進行簡單連線。例如,這些應用程式可能會包含一個多人連線遊戲,其中有兩位使用者一起輕觸他們的裝置,以建立分享的遊戲工作階段。或者,應用程式可能會允許客戶輕觸裝置,並接收到可讓他們取得更多資訊或進行購買的位置連結。

您可以使用鄰近性,讓它在您使用點選手勢時可以快速交換資料。或者,您可以使用輕觸,透過基礎結構網路、Wifi-Direct 或藍牙來設定長期的通訊通道。

注意  

在 Windows Phone 市集應用程式中,不支援使用 Wi-Fi Direct 設定通訊通道。您只能使用基礎結構網路或藍牙來設定長期的通訊通道。

Windows.Networking.Proximity 命名空間的 Windows 執行階段中的類別都支援鄰近性。您可以使用 ProximityDevice 類別與其他位於 4 公分範圍內的裝置進行通訊,並在「輕觸」**時交換少量的資料。您可以使用 PeerFinder 類別和對等應用程式通訊,也可以設定長期的通訊端連線。「對等的應用程式」**是在另一台裝置上執行的相同應用程式。

例如,下列程式碼使用 ProximityDevice 類別的 GetDefault 靜態方法,為本機電腦取得鄰近性裝置的參照。將事件處理器與 DeviceArrivedDeviceDeparted 事件建立關聯之後,您就可以分辨裝置何時進入或離開鄰近性。

function id(elementId) {
    return document.getElementById(elementId);
}

WinJS.Application.onmainwindowactivated = function (e) {
    if (e.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {

        var proximityDevice = Windows.Networking.Proximity.ProximityDevice.getDefault();

        if (proximityDevice != null) {
            proximityDevice.addEventListener("devicearrived", 
                                             proximityDeviceArrived, false);
            proximityDevice.addEventListener("devicedeparted", 
                                             proximityDeviceDeparted, false);
        }
        else {
            id("MessageBlock").innerHTML += "Failed to initialize proximity device.<br/>";
        }

    }
}
function proximityDeviceArrived() {
    id("MessageBlock").innerHTML += "Proximate device arrived.<br/>";
}

function proximityDeviceDeparted() {
    id("MessageBlock").innerHTML += "Proximate device departed.<br/>";
}

如需說明如何在一起輕觸或透過對等瀏覽連線的裝置間建立網路連線的範例程式碼,請參閱快速入門:使用輕觸或瀏覽來連線應用程式。如需說明如何在一起輕觸的裝置間分享少量訊息的範例程式碼,請參閱快速入門:使用輕觸來發佈和訂閱訊息。如需說明如何建立多重對等應用程式連線,以及使用 PeerWatcher、ProximityDevice 及 PeerWatcher 物件針對範圍內的對等應用程式進行動態掃描的範例程式碼,請參閱鄰近性範例

重要  

若要在應用程式中使用輕觸,則必須在應用程式的套件資訊清單中啟用鄰近性功能。

 

重要  

鄰近性 API 不提供驗證。您應該避免與這些 API 交換敏感資料。

 

如何判斷是否支援鄰近性

如稍早所述,裝置必須安裝實作 Windows 鄰近性介面的裝置,才能使用鄰近性功能 (如需實作 Windows 鄰近性介面的相關資訊,請參閱 Windows 8 近場鄰接實作規格)。您可以檢查 PeerFinder.SupportedDiscoveryTypes 屬性以查看是否支援 Triggered 連線、檢查 GetDefault 方法是否傳回 NULL,或取得所有鄰近性裝置的清單並確定該清單至少參照一個裝置,藉以判斷是否已安裝支援鄰近性的裝置。如需如何取得所有已安裝的鄰近性裝置清單的範例,請參閱 GetDeviceSelector 方法。

只有在您的應用程式正在前景執行時,才能啟用鄰近性。

如果您的應用程式移到背景,則會停用所有 ProximityDevicePeerFinder 作業。如果您的應用程式正在前景執行,則您僅能發佈和訂閱訊息,或開放通訊端連線。如果您開放通訊端連線,然後您的應用程式移到背景,則您的通訊端連線將維持開放狀態。

使用鄰近性啟用應用程式

當您使用 PeerFinder 和輕觸將應用程式連線到其他裝置上的對等應用程式時,如果應用程式尚未執行,或未在前景執行,Windows 將會提示另一台裝置的使用者啟用應用程式。如果應用程式已在前景執行,系統便會引發啟用事件,而不會先提示使用者。您也可以透過呼叫採用字串參數的 PeerFinder.Start 方法超載,啟用未在前景執行的應用程式。Start 方法的字串參數包含傳送到對等應用程式的訊息。當訊息傳送到啟用引數時,應用程式便會啟用。

當您使用點選手勢啟用對等應用程式時,會引發 Activated 事件。啟用 KindLaunch。如果您透過使用 PeerFinder.Start 方法傳送訊息來啟用事件,則可以從啟動引數的 Arguments 屬性擷取訊息文字。如果已啟用應用程式來開啟 StreamSocket,則 Arguments 屬性將會傳回字串 Windows.Networking.Proximity.PeerFinder:StreamSocket。在這種情況下,將 TriggeredConnectionStateChanged 屬性設定為適當的事件處理常式,並呼叫 PeerFinder.Start 方法完成通訊端連線。

app.onactivated = function (args) {
    if (args.detail.kind === activation.ActivationKind.launch) {
        if (args.detail.arguments == "Windows.Networking.Proximity.PeerFinder:StreamSocket") {
            // Call PeerFinder.Start to begin multi-user mode.
        }
        else {
            // Respond to the message string in args.detail.arguments
        }

        args.setPromise(WinJS.UI.processAll());
    }
}

如需從點選手勢啟用且自動完成通訊端連線的應用程式範例,請參閱快速入門:使用輕觸或瀏覽來連線應用程式

通訊端通訊協定

如果您使用 StreamSocket 物件將資訊傳送到對等應用程式,則可決定是否要針對共用資訊的方式來定義通訊協定。例如,您可以使用 XML 格式、分隔的名稱/值配對等。當 PeerFinder 類別在對等應用程式之間建立通訊端連線時,無論是哪個版本的應用程式,它都會連結應用程式。因此,您可能會有兩個不同版本的應用程式彼此互相通訊。例如,如果接聽應用程式預期兩個 4 位元組的值,而較新版的應用程式為了容納較多資料而以兩個 8 位元組的值傳送資料,則預期 4 位元組值的接聽應用程式就會在處理資料時發生錯誤。您應該確保較新版的應用程式仍可使用通訊協定與舊版應用程式通訊。也就是說,請確保舊版應用程式能夠忽略較新版應用程式所傳送的新資訊,而不會發生問題。

秘訣  

當對等應用程式通訊時,您通常必須決定哪個應用程式會傳送第一個訊息,而哪個應用程式則會接聽。判定應用程式是傳送程式或接聽程式的其中一個方法,就是比對 streamSocket.information.localAddress.canonicalNamestreamSocket.information.remoteHostName.canonicalName。測試本機主機名稱是否大於遠端主機名稱,就會收到應用程式的兩個執行個體之間的相反結果。

 

相關主題

快速入門:使用輕觸或瀏覽來連線應用程式

快速入門:使用輕觸來發佈和訂閱訊息

鄰近性的指導方針和檢查清單

在應用程式中測試和疑難排解鄰近性

Windows.Networking.Proximity namespace

範例

鄰近性範例