不管是基於IOS藍牙,還是Android 藍牙,藍牙開發的過程都包含下面幾個重要的步驟:
1.搜索設備
設備搜索是一個掃描程序,它會搜索本地附近啟用了藍牙的設備,並從這些設備上獲取一些信息(這個過程有時簡稱為「發現中」、「查詢中」或者「掃描中」)。然而,在本地區域範圍內的藍牙設備只有在它是允許被發現的模式下才會響應其它設備掃描發現的請求。如果一個設備是可被發現的狀態模式,它會通過共享一些信息來響應搜索發現的請求,例如設備名字,設備類型和它唯一的MAC地址。使用這些信息,執行掃描的設備才能創建一個連接連接上被發現的設備。
通過藍牙設備搜索的代碼
a.獲取適配器:mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
b.打開適配器:Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
c.搜索藍牙設備:
獲取已配對設備:Set>BluetoothDevice< pairedDevices = mBtAdapter.getBondedDevices();
搜索周邊設備:mBtAdapter.startDiscovery();
BluetoothDevice.ACTION_FOUND找到一個;
BluetoothAdapter.ACTION_DISCOVERY_FINISHED搜索結束。
2.連接到藍牙ConnectThread:
服務端設備和客戶端設備獲取BluetoothSocket的方法不同。服務端設備將會在接受一個傳入的連接請求時獲得。客戶端設備會在它打開與服務端設備的RFCOMM通道時獲得。
一種解決方案是自動將每一臺設備作為服務端,這樣每一臺設備都擁有一個server socket可以監聽連接。之後,每一臺設備都可以啟動一個與其它設備的連接並變成客戶端設備。另外,也可以明確一臺設備作為服務端根據需要啟動一個server socket,其它設備只要簡單的建立連接。
a.根據地址獲取設備:
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
b.獲取設備soceket:
device.createRfcommSocketToServiceRecord(MY_UUID_SECURE);
c.取消掃描設備,連接soceket:端口:
mAdapter.cancelDiscovery();
mmSocket.connect();
3.數據信息交互ConnectedThread:
首先,你需要為所有數據流的讀寫操作分派一個特定的線程。這是非常重要的,因為read(byte[])和write(byte[])方法都是會阻塞的方法。read(byte[])方法在從數據流中讀取到數據之前會一直阻塞。write(byte[])方法不會經常阻塞,但是在遠程設備沒有及時調用read(byte[])方法並且中間緩沖區滿的時候也會進行阻塞。因此,你的線程中的主循環應該專門用來從InputStream中讀取數據。線程中再指定一個公共方法將數據寫入到OutputStream中。
a.獲取讀寫流
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
b.阻塞方法讀取:
bytes = mmInStream.read(buffer);
c.發送消息
mmOutStream.write(buffer);
d.通過handler將文本添加到listview,成為新的消息
mConversationArrayAdapter.add("Me: " + writeMessage);
下一篇:物聯網APP是什麽
添加微信