Bluetooth(3.0/4.0) Using
Android 手机 Bluetooth 编程
邹继强
2014.06.24
本文介绍蓝牙 3.0、2.0 及蓝牙 4.0 版本 Android 编程应用方法
宝安桃花源
1
目录
1 蓝牙简介....................................................................................................................................... 2
2 蓝牙的工作原理 .......................................................................................................................... 3
2.1 蓝牙通信的主从关系 ....................................................................................................... 3
2.2 蓝牙的呼叫过程 ............................................................................................................... 3
2.3 蓝牙一对一的串口数据传输应用 ................................................................................... 3
3 蓝牙 Android 编程应用 ............................................................................................................... 3
3.1 蓝牙 3.0 及以下版本编程 ................................................................................................ 3
3.1.1 认识一下 UUID ...................................................................................................... 3
3.1.2 版本 3.0 蓝牙 Android 编程原理 ......................................................................... 4
3.2 蓝牙 4.0 编程.................................................................................................................. 12
3.2.1 概念 ...................................................................................................................... 12
3.2.2 编程 API –Level18-19 ....................................................................................... 13
宝安桃花源
2
1 蓝牙简介
蓝牙这个名称来自于第十世纪的一位丹麦国王哈拉尔蓝牙王,Blatand 在英文里的意思
图 1 哈拉尔蓝牙王
可以被解释为 Bluetooth( 蓝牙 )因为国王喜欢吃蓝莓,牙龈每天都是蓝色的所以叫蓝牙。
在行业协会筹备阶段,需要一个极具有表现力的名字来命名这项高新技术。行业组织人员,
在经过一夜关于欧洲历史和未来无线技术发展的讨论后,有些人认为用 Blatand 国王的名字
命名再合适不过了。Blatand 国王将挪威,瑞典和丹麦统一起来;他的口齿伶俐,善于交际,
就如同这项即将面世的技术,技术将被定义为允许不同工业领域之间的协调工作,保持着各
个系统领域之间的良好交流,例如计算机,手机和汽车行业之间的工作。名字于是就这么定
下来了。
蓝牙的创始人是爱立信公司,爱立信早在 1994 年就已进行研发。1997 年,爱立信与
其他设备生产商联系,并激发了他们对该项技术的浓厚兴趣。 1998 年 2 月,跨国大公司,
图 2 蓝牙标志的来历
包括诺基亚、苹果、三星组成的一个特殊兴趣小组(SIG),他们共同的目标是建立一
个全球性的小范围无线通信技术,即蓝牙。
宝安桃花源
3
而蓝牙这个标志的设计:它取自 Harald Bluetooth 名字中的「H」和「B」两个字母,
用古北欧字母来表示,将这两者结合起来,就成为了蓝牙的 logo(见图)。
2 蓝牙的工作原理
2.1 蓝牙通信的主从关系
蓝牙技术规定每一对设备之间进行蓝牙通讯时,必须一个为主角色,另一为从角色,
才能进行通信,通信时,必须由主端进行查找,发起配对,建链成功后,双方即可收发数据。
理论上,一个蓝牙主端设备,可同时与 7 个蓝牙从端设备进行通讯。一个具备蓝牙通讯功
能的设备, 可以在两个角色间切换,平时工作在从模式,等待其它主设备来连接,需要时,
转换为主模式,向其它设备发起呼叫。一个蓝牙设备以主模式发起呼叫时,需要知道对方的
蓝牙地址,配对密码等信息,配对完成后,可直接发起呼叫。
2.2 蓝牙的呼叫过程
蓝牙主端设备发起呼叫,首先是查找,找出周围处于可被查找的蓝牙设备。主端设备
找到从端蓝牙设备后,与从端蓝牙设备进行配对,此时需要输入从端设备的 PIN 码,也有
设备不需要输入 PIN 码。配对完成后,从端蓝牙设备会记录主端设备的信任信息,此时主
端即可向从端设备发起呼叫,已配对的设备在下次呼叫时,不再需要重新配对。已配对的设
备,做为从端的蓝牙耳机也可以发起建链请求,但做数据通讯的蓝牙模块一般不发起呼叫。
链路建立成功后,主从两端之间即可进行双向的数据或语音通讯。在通信状态下,主端和从
端设备都可以发起断链,断开蓝牙链路。
2.3 蓝牙一对一的串口数据传输应用
蓝牙数据传输应用中,一对一串口数据通讯是最常见的应用之一,蓝牙设备在出厂前
即提前设好两个蓝牙设备之间的配对信息,主端预存有从端设备的 PIN 码、地址等,两端
设备加电即自动建链,透明串口传输,无需外围电路干预。一对一应用中从端设备可以设为
两种类型,一是静默状态,即只能与指定的主端通信,不被别的蓝牙设备查找;二是开发状
态,既可被指定主端查找,也可以被别的蓝牙设备查找建链。
3 蓝牙 Android 编程应用
参考文献:http://www.epx.com.br/artigos/bluetooth_gatt.php
3.1 蓝牙 3.0 及以下版本编程
3.1.1 认识一下 UUID
UUID 含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标
准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算
宝安桃花源
4
环境 (Distributed Computing Environment, DCE) 领域的一部分。
在蓝牙 3.0 及一下版本中,UUID 被用于唯一标识一个服务,比如文件传输服务,串口
服务、打印机服务等,如下:
#蓝牙串口服务
SerialPortServiceClass_UUID = '{00001101-0000-1000-8000-00805F9B34FB}'
LANAccessUsingPPPServiceClass_UUID = '{00001102-0000-1000-8000-00805F9B34FB}'
#拨号网络服务
DialupNetworkingServiceClass_UUID = '{00001103-0000-1000-8000-00805F9B34FB}'
#信息同步服务
IrMCSyncServiceClass_UUID = '{00001104-0000-1000-8000-00805F9B34FB}'
SDP_OBEXObjectPushServiceClass_UUID = '{00001105-0000-1000-8000-00805F9B34FB}
'
#文件传输服务
OBEXFileTransferServiceClass_UUID = '{00001106-0000-1000-8000-00805F9B34FB}'
IrMCSyncCommandServiceClass_UUID = '{00001107-0000-1000-8000-00805F9B34FB}'
蓝牙的连接有主从设备,提供服务的可以认为是从设备。主设备通过 UUID 访问从设备
提供具有相同 UUID 的服务,从而建立客服端—服务器(C/S)模式。
3.1.2 版本 3.0 蓝牙 Android 编程原理
使用蓝牙功能 ,首先要获得权限,蓝牙权限设置:
<uses-permission android:name="android.permission .BLU ETOOTH" />
<uses-permission android:name="android.permission .BLU ETOOTH_ADMIN"/>
A 建立并获得本地蓝牙适配器:
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
B 如果本地有蓝牙设备,者开启。
if (mBluetoothAdapter != null) { //判断是否有蓝牙
if (!mBluetoothAdapter.isEnabled()) {//判断蓝牙 是否开启,未开启则请用
户开启
Intent enableBtIntent = new
Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, 1);
评论1