《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 模擬設(shè)計(jì) > 設(shè)計(jì)應(yīng)用 > Android應(yīng)用之藍(lán)牙傳感應(yīng)用
Android應(yīng)用之藍(lán)牙傳感應(yīng)用
摘要: 如果傳感器本身需要包含控制電路(例如采集血氧信號(hào)需要紅外和紅外線交替發(fā)射),那么傳感器本身就需要帶一片主控IC,片內(nèi)采集并輸出數(shù)字信號(hào)了。
Abstract:
Key words :

如果傳感器本身需要包含控制電路(例如采集血氧信號(hào)需要紅外和紅外線交替發(fā)射),那么傳感器本身就需要帶一片主控IC,片內(nèi)采集并輸出數(shù)字信號(hào)了。Android手機(jī)如何在不改硬件電路的前提下與這類(lèi)數(shù)字傳感器交互呢?可選的通信方式就有USB和藍(lán)牙,兩種方式各有好處:USB方式可以給傳感器供電,藍(lán)牙方式要自備電源;USB接口標(biāo)準(zhǔn)不一,藍(lán)牙普遍支持SPP協(xié)議。本文選擇藍(lán)牙方式做介紹,介紹Android的藍(lán)牙API以及藍(lán)牙客戶(hù)端的用法。
      在Android 2.0,官方終于發(fā)布了藍(lán)牙API(2.0以下系統(tǒng)的非官方的藍(lán)牙API可以參考這里:http://code.google.com/p/android-bluetooth/)。Android手機(jī)一般以客戶(hù)端的角色主動(dòng)連接SPP協(xié)議設(shè)備(接上藍(lán)牙模塊的數(shù)字傳感器),連接流程是:
1.使用registerReceiver注冊(cè)BroadcastReceiver來(lái)獲取藍(lán)牙狀態(tài)、搜索設(shè)備等消息;
2.使用BlueAdatper的搜索;
3.在BroadcastReceiver的onReceive()里取得搜索所得的藍(lán)牙設(shè)備信息(如名稱(chēng),MAC,RSSI);
4.通過(guò)設(shè)備的MAC地址來(lái)建立一個(gè)BluetoothDevice對(duì)象;

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

6.通過(guò)BluetoothSocket的createRfcommSocketToServiceRecord()方法來(lái)選擇連接的協(xié)議/服務(wù),這里用的是SPP(UUID:00001101-0000-1000-8000-00805F9B34FB);
7.Connect之后(如果還沒(méi)配對(duì)則系統(tǒng)自動(dòng)提示),使用BluetoothSocket的getInputStream()和getOutputStream()來(lái)讀寫(xiě)藍(lán)牙設(shè)備。

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

本文的代碼較多,可以到這里下載:http://www.pudn.com/downloads305/sourcecode/comm/android/detail1359043.html

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

注冊(cè)BroadcastReceiver:

view plaincopy to clipboardprint?
IntentFilter intent = new IntentFilter();  
intent.addAction(BluetoothDevice.ACTION_FOUND);// 用BroadcastReceiver來(lái)取得搜索結(jié)果  
intent.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);  
intent.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);  
intent.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);  
registerReceiver(searchDevices, intent); 
  IntentFilter intent = new IntentFilter();
  intent.addAction(BluetoothDevice.ACTION_FOUND);// 用BroadcastReceiver來(lái)取得搜索結(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)容:

view plaincopy to clipboardprint?
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)));  
            } 
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ù)。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
主站蜘蛛池模板: 亚洲欧美另类色图| 国产乱理伦片在线观看大陆| a在线观看免费视频| 成年女人免费视频播放77777| 久久综合九色综合欧美狠狠| 欧美另类杂交a| 亚洲第一页视频| 玉蒲团之偷情宝典| 午夜丰满少妇性开放视频| 花季传媒下载免费安装app| 国产女人好紧好爽| 欧美jizz40性欧美| 国产精品亚洲一区二区无码| 91精品国产综合久久久久久| 天天摸夜夜摸成人免费视频| 一本大道香蕉在线高清视频| 成年日韩片av在线网站| 久久久久久久久久久福利| 日韩免费高清视频网站| 亚洲AV无码无在线观看红杏| 欧美亚洲综合网| 亚洲成av人片在线观看无 | 国内精品一区二区三区最新| a级毛片无码免费真人| 好硬啊进得太深了h动态图120秒| 两根一进一出啊灌满了视频| 按摩xxxx全套| 中文字幕日韩一区二区三区不| 日本伊人色综合网| 久久亚洲国产精品123区| 日韩人妻一区二区三区免费| 乖帮我拉开拉链它想你| 机机对机机的30分钟免费软件| 亚洲伊人久久大香线蕉结合| 欧美大陆日韩一区二区三区| 亚洲成综合人影院在院播放| 欧美激情一区二区三区在线| 亚洲精品国精品久久99热| 狠狠人妻久久久久久综合蜜桃 | 精品欧美一区二区在线观看| 嘟嘟嘟www在线观看免费高清|