a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 系統(tǒng) > Android > 正文

Android提高之藍(lán)牙傳感應(yīng)用實(shí)例

2020-04-11 11:45:57
字體:
供稿:網(wǎng)友

前面文章介紹了Android利用麥克風(fēng)采集并顯示模擬信號(hào)的實(shí)現(xiàn)方法,這種采集手段適用于無IO控制、單純讀取信號(hào)的情況。如果傳感器本身需要包含控制電路(例如采集血氧信號(hào)需要紅外和紅外線交替發(fā)射),那么傳感器本身就需要帶一片主控IC,片內(nèi)采集并輸出數(shù)字信號(hào)了。Android手機(jī)如何在不改硬件電路的前提下與這類數(shù)字傳感器交互呢?可選的通信方式就有USB和藍(lán)牙,兩種方式各有好處:USB方式可以給傳感器供電,藍(lán)牙方式要自備電源;USB接口標(biāo)準(zhǔn)不一,藍(lán)牙普遍支持SPP協(xié)議。本文就選擇藍(lán)牙方式做介紹,介紹Android的藍(lán)牙API以及藍(lán)牙客戶端的用法。

自從Android 2.0起,官方終于發(fā)布了藍(lán)牙API(2.0以下系統(tǒng)的非官方的藍(lán)牙API可以參考這里:http://code.google.com/p/android-bluetooth/)。Android手機(jī)一般以客戶端的角色主動(dòng)連接SPP協(xié)議設(shè)備(接上藍(lán)牙模塊的數(shù)字傳感器),連接流程是:

1.使用registerReceiver注冊(cè)BroadcastReceiver來獲取藍(lán)牙狀態(tài)、搜索設(shè)備等消息;

2.使用BlueAdatper的搜索;

3.在BroadcastReceiver的onReceive()里取得搜索所得的藍(lán)牙設(shè)備信息(如名稱,MAC,RSSI);

4.通過設(shè)備的MAC地址來建立一個(gè)BluetoothDevice對(duì)象;

5.由BluetoothDevice衍生出BluetoothSocket,準(zhǔn)備SOCKET來讀寫設(shè)備;

6.通過BluetoothSocket的createRfcommSocketToServiceRecord()方法來選擇連接的協(xié)議/服務(wù),這里用的是SPP(UUID:00001101-0000-1000-8000-00805F9B34FB);

7.Connect之后(如果還沒配對(duì)則系統(tǒng)自動(dòng)提示),使用BluetoothSocket的getInputStream()和getOutputStream()來讀寫藍(lán)牙設(shè)備。

先來看看本文程序運(yùn)行的效果圖,所選的SPP協(xié)議設(shè)備是一款單導(dǎo)聯(lián)心電采集表:

由于本文的代碼較多,讀者可以點(diǎn)此下載完整代碼

本文程序包含兩個(gè)Activity,即testBlueTooth和WaveDiagram,testBlueTooth是搜索建立藍(lán)牙連接。BluetoothAdapter、BluetoothDevice和BluetoothSocket的使用很簡(jiǎn)單,除了前三者提供的功能外,還可以通過給系統(tǒng)發(fā)送消息來控制、獲取藍(lán)牙信息,例如:

注冊(cè)BroadcastReceiver:

IntentFilter intent = new IntentFilter();intent.addAction(BluetoothDevice.ACTION_FOUND);// 用BroadcastReceiver來取得搜索結(jié)果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()枚舉所有消息的內(nèi)容:

String action = intent.getAction();Bundle b = intent.getExtras();Object[] lstName = b.keySet().toArray();// 顯示所有收到的消息及其細(xì)節(jié)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返回的消息:

程序另外一個(gè)Activity,即WaveDiagram用于讀取藍(lán)牙數(shù)據(jù)并繪制波形圖,這里要注意一下JAVA的byte的取值范圍是跟C/C++不一樣的,Android接收到的byte數(shù)據(jù)要做"& 0xFF"處理,轉(zhuǎn)為C/C++等值的數(shù)據(jù)。

最后,希望本文所述實(shí)例能夠?qū)Υ蠹疫M(jìn)行Android開發(fā)起到幫助與借鑒作用。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 亚洲国产精品区 | 欧美国产一区二区 | 视频一区免费观看 | 欧美久久a| 久久青青视频 | 91精品国产乱码久久久久久久久 | 日韩欧美在线播放 | 久久婷婷色 | 成人在线 | 成年免费视频黄网站在线观看 | 激情久久久 | 欧美成人免费在线观看 | 欧美久草 | www.日韩视频 | 在线观看中文 | 99久久综合国产精品二区 | 国产一区二区精品在线观看 | 男女网站视频 | 香蕉久久一区二区不卡无毒影院 | 亚洲人人草 | 黄a免费 | 久久精品免费观看 | 国产精品自产拍在线观看桃花 | 亚洲精品视频在线 | 国产成人精品在线 | 免费精品视频 | 亚洲一级性生活片 | 国产成人午夜片在线观看高清观看 | 国产成人涩涩涩视频在线观看 | 91精品一区二区三区久久久久久 | 欧美精品成人一区二区三区四区 | 欧美激情精品久久久久 | 国产美女高潮一区二区三区 | 亚洲高清视频在线 | 亚洲成人自拍 | 国产精品无码久久久久 | 国产精品久久久久久久久久久杏吧 | 国产欧美综合一区二区三区 | 一区二区三区四区国产 | 精品免费视频 | 天天干天天看天天操 |