Android手機一般以用戶端的角色主動連接SPP協定設備(接上藍牙模組的數位感應器),連接流程是:
1.使用registerReceiver註冊BroadcastReceiver來獲取藍牙狀態、搜索設備等消息;
2.使用BlueAdatper的搜索;
3.在BroadcastReceiver的onReceive()裡取得搜索所得的藍牙設備資訊(如名稱,MAC,RSSI);
4.通過設備的MAC位址來建立一個BluetoothDevice物件;
5.由BluetoothDevice衍生出BluetoothSocket,準備SOCKET來讀寫設備;
6.通過BluetoothSocket的createRfcommSocketToServiceRecord()方法來選擇連接的協定/服務,這裡用的是SPP(UUID:00001101-0000-1000-8000-00805F9B34FB);
7.Connect之後(如果還沒配對則系統自動提示),使用BluetoothSocket的getInputStream()和getOutputStream()來讀寫藍牙設備。

先來看看本文程式運行的效果圖,所選的SPP協定設備是一款單導聯心電採集表:
20130222115126957  

本 文套裝程式含兩個Activity(testBlueTooth和WaveDiagram),testBlueTooth是搜索建立藍牙連接。 BluetoothAdapter、BluetoothDevice和BluetoothSocket的使用很簡單,除了前三者提供的功能外,還可以通過 給系統發送消息來控制、獲取藍牙資訊,例如:
註冊BroadcastReceiver:

IntentFilter intent = new IntentFilter();
intent.addAction(BluetoothDevice.ACTION_FOUND);// 用BroadcastReceiver來取得搜尋結果
intent.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
intent.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);
intent.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
registerReceiver(searchDevices, intent);

在BroadcastReceiver的onReceive()枚舉所有消息的內容:

String action = intent.getAction();
Bundle b = intent.getExtras();
Object[] lstName = b.keySet().toArray();

顯示所有收到的消息及其細節
for (int i = 0; i < lstName.length; i++) {
String keyName = lstName[i].toString();
Log.e(keyName, String.valueOf(b.get(keyName)));
}

在DDMS裡面可以看到BluetoothDevice.ACTION_FOUND返回的消息:
20130222115127687  

創作者介紹

資訊園

shadow 發表在 痞客邦 PIXNET 留言(1) 人氣()


留言列表 (1)

發表留言
  • Jiun-Lin Tseng
  • 你好 最近我剛好要實作到利藍芽介面把新店訊號傳到手機上 請問手機端的ANDROID有沒有相關的資訊提供給我作為參考......
找更多相關文章與討論