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