Android提高之藍(lán)牙傳感應(yīng)用實(shí)例
前面文章介紹了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ā)起到幫助與借鑒作用。
- native.js獲取手機(jī)硬件基本信息實(shí)例代碼android版
- Dcloud的native.js直接撥打電話Android實(shí)例代碼
- DCloud的native.js調(diào)用系統(tǒng)分享實(shí)例Android版代碼
- Android藍(lán)牙開發(fā)深入解析
- 詳解Android——藍(lán)牙技術(shù) 帶你實(shí)現(xiàn)終端間數(shù)據(jù)傳輸
- Android Bluetooth藍(lán)牙技術(shù)使用流程詳解
- Android單片機(jī)與藍(lán)牙模塊通信實(shí)例代碼
- 分享Android 藍(lán)牙4.0(ble)開發(fā)的解決方案
- android實(shí)現(xiàn)藍(lán)牙文件發(fā)送的實(shí)例代碼,支持多種機(jī)型
- Android手機(jī)通過藍(lán)牙連接佳博打印機(jī)的實(shí)例代碼
- Android系統(tǒng)中的藍(lán)牙連接程序編寫實(shí)例教程
- Android藍(lán)牙通信聊天實(shí)現(xiàn)發(fā)送和接受功能
- Android適配安卓6.0藍(lán)牙通訊實(shí)現(xiàn)過程
- Android編程之藍(lán)牙測(cè)試實(shí)例
- Android 獲取藍(lán)牙Mac地址的正確方法
- Android 藍(lán)牙2.0的使用方法詳解
- Android實(shí)現(xiàn)藍(lán)牙客戶端與服務(wù)器端通信示例
- Android 藍(lán)牙連接 ESC/POS 熱敏打印機(jī)打印實(shí)例(藍(lán)牙連接篇)
- Android 取消藍(lán)牙配對(duì)框?qū)崿F(xiàn)自動(dòng)配對(duì)功能
- Android開發(fā)實(shí)現(xiàn)實(shí)時(shí)檢測(cè)藍(lán)牙連接狀態(tài)的方法【附源碼下載】
- Native.js獲取監(jiān)聽開關(guān)等操作Android藍(lán)牙設(shè)備實(shí)例代碼
相關(guān)文章
Android選擇圖片或視頻進(jìn)行循環(huán)播放
這篇文章主要為大家詳細(xì)介紹了Android選擇圖片或視頻進(jìn)行循環(huán)播放,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10基于Android studio3.6的JNI教程之ncnn之語義分割ENet
這篇文章主要介紹了基于Android studio3.6的JNI教程之ncnn之語義分割ENet的相關(guān)知識(shí),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2020-03-03Android實(shí)現(xiàn)文件的保存與讀取功能示例
這篇文章主要介紹了Android實(shí)現(xiàn)文件的保存與讀取功能,涉及Android中文件操作函數(shù)getFileDir()和getCacheDir()的相關(guān)使用技巧,需要的朋友可以參考下2016-08-08Android編程向服務(wù)器發(fā)送請(qǐng)求時(shí)出現(xiàn)中文亂碼問題的解決方法
這篇文章主要介紹了Android編程向服務(wù)器發(fā)送請(qǐng)求時(shí)出現(xiàn)中文亂碼問題的解決方法,實(shí)例分析了Android參數(shù)傳遞過程中中文亂碼的解決技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11OpenGL Shader實(shí)現(xiàn)光照發(fā)光體特效
這篇文章主要介紹了如何通過OpenGL Shader實(shí)現(xiàn)光照發(fā)光體特效,不同于陰影遮蓋,它是利用圓形繪制向內(nèi)部。感興趣的小伙伴可以了解一下2022-02-02android手機(jī)獲取唯一標(biāo)識(shí)的方法
這篇文章主要 為大家詳細(xì)介紹了android手機(jī)獲取唯一標(biāo)識(shí)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06