徐 丽 仙
(扬州职业大学,江苏 扬州 225009)
物联网技术的应用与普及正在我国蓬勃兴起,互联技术作为物联网技术的核心,在物和物之间进行信息通讯。无线互联技术如3G、4G、蓝牙、无线局域网(WLAN)、红外技术等由于其方便、快捷和灵活等特点,出现在物联网应用中。这些技术都有各自的优势特点,蓝牙技术应用于低功耗、低成本、近距离无线数据传输,采用全球统一的频段设定,更加灵活地提供物与物间的信息通信[1]。因此,在基于Android 操作系统的应用程序中,利用设备中的蓝牙模块实现数据交互功能,其应用领域包括文件传输、工业控制、智能家用电器等。
系统开发环境采用的是Eclipse 所提供的框架服务[2]。它是一个开放源码,基于Java 设计语言构建的可扩展性平台。为了能够满足开发需求,必须对其环境进行配置。
JDK 即Java Development Kit,是Java 程序运行的基础,提供了Java 运行环境、工具和基础类等。
ADT 即Android Development Tools,它在Eclipse 环境下,为开发人员提供基于Android 操作系统进行程序开发的工具服务,如开发工具的升级下载等。
SDK 即Software Development Kit,是基于Android 开发工具包集合的特定软件包。提供了运行程序要求的库文件、所需环境和开发工具。该工具已提供给开发人员,开发人员根据需要到Google 官方网站下载相应版本并进行安装。
在Android SDK 包中含有多个与蓝牙操作相关的API 接口类,其主要作用见表1。
表1 蓝牙相关类及说明
其中BluetoothAdapter 类和BluetoothDevice类是实现蓝牙设备间建立通信机制的最主要类。
该类是代表本地蓝牙适配器的类,用于执行基本的蓝牙操作任务,如搜索并发现设备,查询已配对设备,通过获得的MAC 地址实例化蓝牙设备,同时创建BluetoothServerSocket,用于监听其它设备的连接请求[3]。
一般通过调用静态的getdefaultadapter()方法来获得BluetoothAdapter 表示的本地蓝牙适配器;然后通过getbondeddevices()方法得到一组已配对的蓝牙设备;使用startDiscovery()方法搜索蓝牙设备;或创建bluetoothserversocke 用于监听新的连接请求。但是这些方法基本都需要得到BLUETOOTH 或BLUETOOTH-ADMIN 许 可 才 能实现,这就必须要在相应文件中进行相关声明。
该类代表的是远程蓝牙设备,同时也需要得到蓝牙许可。BluetoothDevice 类可创建设备并可查询如名称、地址、类和连接状态等相关信息。通过创建BluetoothDevice 的BluetoothAdapter 对象,用于实现对远程蓝牙设备地址的操作。
当使用BluetoothAdapter 获得蓝牙设备后,通常采用getRemoteDevice()方法创建一个已知MAC 地址的代表设备,也可从BluetoothAdapter和getBondedDevices()方法返回的已绑定的设备中得到它。最后使用createRfcommSocketToServiceRecord(UUID)方法建立与远程设备通信的BluetoothSocket。
在Eclipse 开发环境中,利用蓝牙相关的类实现蓝牙功能,首先必须在Eclipse 的AndroidManifest.xml 配置文件中进行授权声明,否则不能完成后面的相应操作[4]。声明代码如下:
当两个蓝牙设备进行手动配对成功后,在应用程序中获取已配对的对方蓝牙设备名称,其主要过程有四个步骤,见图1。
为了能够在应用程序中通过事件触发程序运行,在项目的XML 布局文件添加一个按钮控件,添加其id 为searchBluetoothButton,Text。
属性设置为“开始扫描蓝牙设备”。并且要在Activity[5]的Java 文件的OnCreate()方法中得到该按钮(该方法在Activity 第一次调用时就会被创建),并通过调用ButtonListener 监听器类的功能与监听器进行绑定。ButtonListener 类就是用来实现已配对蓝牙设备获取功能的。最后就可在监听器类中实现蓝牙设备的获取。
图1 设备获取过程
获取按钮和绑定监听器代码如下:
ButtonListener 类继承于父类OnClickListener,过程在该类的onClick 方法中实现。
用方法getDefaultAdapter()得到BluetoothAdapter 对象并命名为Btadapter。该对象是指应用程序所运行的本机的蓝牙设备。由于该API 支持多个本地蓝牙设备,而当前Android 系统只能支持一个,所以只能返回一个默认的蓝牙适配器。当本地拥有时则返回默认蓝牙适配器,如硬件平台不支持时返回值为空。
如返回不为null,通过isEnable()判断蓝牙设备是否可用,返回true 表示可用。接着创建一个Intent 对象,启动用于提示并允许用户开启蓝牙设备的Activity (ACTION-REQUEST-ENABLE)。
获取所有与本地蓝牙适配器已配对(绑定)的远程蓝牙适配器,并放入set 集合中。当出现错误时则返回null。
使用迭代器的next()方法依次获取远程蓝牙设备的地址,以便对蓝牙设备进行相关操作。在本例中为了能够更加直观地得到所获取的地址,在程序中将所有地址进行了输出处理。
蓝牙设备地址的获取是建立蓝牙通信的前提和基础,本文主要研究了生成BluetoothAdapter 对象,蓝牙设备扫描,判断和开启蓝牙设备,获取对方蓝牙设备地址等过程。并在Eclipse 开发环境下,使用Android SDK 中提供的相关类实现此功能。为以Eclipse 平台进行Android 系统开发的人员,在更多与蓝牙应用相关的开发中提供一些实际参考。
[1] 鲍晓娟,曹树伟.蓝牙技术浅析[J].赤峰学院学报:自然科学版,2013(24):21 -22.
[2] 焦健.Eclipse 下Android 环境的搭建[J].信息与电脑:理论版,2012(6):33 -34.
[3] 陈志崇,张祺.基于Android 的蓝牙通信接口[J].电子世界,2013(6):16 -17.
[4] 冯艳红,何加铭.基于Android 蓝牙技术的健康服务系统设计[J].无线电通信技术,2014(1):61 -64.
[5] 张晶. 基于Android 环境的应用程序开发与研究[J].硅谷,2012(7):80 -81.