- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Android提高之蓝牙传感应用实例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
前面文章介绍了android利用麦克风采集并显示模拟信号的实现方法,这种采集手段适用于无io控制、单纯读取信号的情况。如果传感器本身需要包含控制电路(例如采集血氧信号需要红外和红外线交替发射),那么传感器本身就需要带一片主控ic,片内采集并输出数字信号了。android手机如何在不改硬件电路的前提下与这类数字传感器交互呢?可选的通信方式就有usb和蓝牙,两种方式各有好处:usb方式可以给传感器供电,蓝牙方式要自备电源;usb接口标准不一,蓝牙普遍支持spp协议。本文就选择蓝牙方式做介绍,介绍android的蓝牙api以及蓝牙客户端的用法.
自从android 2.0起,官方终于发布了蓝牙api(2.0以下系统的非官方的蓝牙api可以参考这里:http://code.google.com/p/android-bluetooth/)。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协议设备是一款单导联心电采集表:
由于本文的代码较多,读者可以点此下载完整代码.
本文程序包含两个activity,即testbluetooth和wavediagram,testbluetooth是搜索建立蓝牙连接。bluetoothadapter、bluetoothdevice和bluetoothsocket的使用很简单,除了前三者提供的功能外,还可以通过给系统发送消息来控制、获取蓝牙信息,例如:
注册broadcastreceiver:
1
2
3
4
5
6
|
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()枚举所有消息的内容:
1
2
3
4
5
6
7
8
9
|
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返回的消息:
程序另外一个activity,即wavediagram用于读取蓝牙数据并绘制波形图,这里要注意一下java的byte的取值范围是跟c/c++不一样的,android接收到的byte数据要做"& 0xff"处理,转为c/c++等值的数据.
最后,希望本文所述实例能够对大家进行android开发起到帮助与借鉴作用.
最后此篇关于Android提高之蓝牙传感应用实例的文章就讲到这里了,如果你想了解更多关于Android提高之蓝牙传感应用实例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!