• 沒有找到結果。

進入本系統時,會在第三層預先檢查手機藍芽功能是否開啟,如圖 3.5,若 否則跳出開啟對話窗,之後取得將本機的藍芽 MAC,將其包裝成 NDEF[18]資料 格式,並指定其類別為 RTD[19]中的 text 格式,之後便啟用前景偵測模式,系統 隨時偵測對方是否靠近感應,若偵測到便將本機的藍芽 MAC address 傳送給對方,

用以進行連線(程式碼 3.1)。

圖 3.5 要求開啟藍芽 if(mBluetoothAdapter.isEnabled())

{

//push nfc message

NfcManager manager = (NfcManager) getSystemService(NFC_SERVICE);

//抓取藍芽的 MAC Address String btMac = mBluetoothAdapter.getAddress();

NdefRecord.RTD_TEXT , new byte[0],btMac.getBytes());

/*要支援 push, 只需要在 onResume 時使用 enableForegroundNdefPush 就可 以了*/

manager.getDefaultAdapter().enableForegroundNdefPush(this, new NdefMessage(new NdefRecord[]{rec}));

manager.getDefaultAdapter().enableForegroundDispatch(this, PendingIntent.getActivity(this, 0,new Intent(this,

getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0), new IntentFilter[] {ndef, },

new String[][] { new String[] { NfcF.class.getName() } });

}

程式碼 3.1 將本機藍芽 MAC 以 NFC P2P 傳輸

在獲得對方的 MAC address 後,必須要有統一的機制來決定 Server 與 Client,

在此把資訊傳到第一層,會比較十六進位 MAC address 的大小,較小者為 Server,

另一端則為 Client(見程式碼 3.2),Server 端啟動一執行緒聽是否有裝置連入,而

Client 則直接對 Server 的 address 進行連線,都是在第一層的部分處理,決定好 各自的角色後,便會自動開始連線(見程式碼 3.3),不需要使用者作其他操作,

連線後會將資訊存在第一層,彼此都知道 client 與 server 的資訊。

/*比較出何者為 SERVER 另一個為 CLIENT*/

public void decideServer(String _device_1, String _device_2) {

String device_1 = mac2string(_device_1);

String device_2 = mac2string(_device_2);

public void setDevice(String _device_1, String _device_2) {

decideServer(_device_1,_device_2);

if(personalMac == clientMac) {

mDevice = mAdapter.getRemoteDevice(serverMac);

this.connect(mDevice);

別,為什麼一邊要讓自己可被偵測,而另一邊要發現對方裝置等等,本文所提出 的方式,以簡單的說明,引導使用者動作,亦不需要任何藍芽連線的先備知識,

傳統連線操作上隨著熟悉度的不同,造成連線的時間有所差異,我們與兩個擁有 藍芽先備知識的同學經過測試時間平均為 11.4 秒,每次掃描裝置時間長短不一 操作步驟也較多,如圖 3.6、圖 3.7、圖 3.8,而本文的方式,經過測試平均為

5.4 秒,其時間區段見表 2.1,操作步驟如圖 3.9、圖 3.10,由此可得,使用本 研究連線方法可節省 52%的時間。

表 3.1 連線時間分佈表

NFC P2P 傳送 MAC 與 Service 程式連接 建立藍芽連線

1.5 秒左右 1 秒 ~3 秒

傳統的方法(以 Bluetooth Chat 為例):

圖 3.6 首先開啟選單,接著 Server 端要讓自己可被偵測

圖 3.7Client 端需要先瀏覽以配對的裝置,若無,則搜尋裝置

圖 3.8 點擊裝置後連線完成

圖 3.9 提示使用者動作,接觸後顯示連線中的訊息,其中 Client 會跳出 SATE_CONNECTING,Server 則是 STATE_LISTEN

圖 3.10 連線完成後,藍芽部分的功能才會顯示出來

由以上步驟,可以看出本文所提供的方法相當方便使用,只要互相將手機背 部的 NFC 晶片靠近即可,即使是不善於操作手機的人都可以輕鬆了解,經過實 測本文連線所需時間平均 5.4 秒,考慮到使用 NFC 時可能不方便看到螢幕所顯 示的訊息,因此在連線完成後播放音效以提醒使用者。

相關文件