蓝牙模块(一)(高级).pdf_第1页
蓝牙模块(一)(高级).pdf_第2页
蓝牙模块(一)(高级).pdf_第3页
蓝牙模块(一)(高级).pdf_第4页
蓝牙模块(一)(高级).pdf_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

蓝牙模块(一)蓝牙模块(一) android平台手机应用开发技术培训 高级.第19讲 学习目标: 目标学员: 课程时长:45分钟 有java语言基础的开发者或在校计 算机相关专业大学生 通过案例开发掌握在android中使用 bluetooth模块进行蓝牙开发的方法。 蓝牙技术介绍蓝牙技术介绍 常用类介绍 蓝牙的使用介绍 项目演练 课程目录课程目录 蓝牙技术简介 蓝牙是一种支持设备短距离通信 (一般10m左右)的无线技术。 能在包括移动电话、pda、无线 耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换。 蓝牙技术是一个全球公开的无线应用标准。它是一种低成本的近距离无线连 接方案,被广泛采用于各种移动设备。 利用蓝牙技术,能够有效地简化移动通信终端设备之间的通信,并使数据传 输变得更加迅速高效,为无线通信拓宽道路。 蓝牙技术的优势 蓝牙技术可以免费使用。 它在2.4ghz波段运行,该波段是无需申请许可证的 工业、科技、医学 (ism) 无线电波段。因此蓝牙技术不需要支付任何费用。 低功耗,小体积,低成本的芯片使得蓝牙技术可以应用于极小的设备中。 蓝牙是一项即时技术,非常易于使用。它不要求固定的基础设施,且易于安 装和设置。 蓝牙技术采用全球通用的规格,是目前市场上支持范围最广泛,功能最丰富 且安全的无线标准。 蓝牙技术被普遍应用于各个领域,支持蓝牙的电子产品随处可见。因此在蓝 牙技术之上,拥有非常广阔的应用空间,同时也为移动应用开发带来了无限 的创意空间。 蓝牙协议简介 蓝牙协议的核心由以下四部分组成: 基带协议是用来指定或实施媒体接入的物理层程序。它是蓝牙设备之间 互联的基础。 链路管理协议(lmp),它负责蓝牙设备间连接的建立和设置。它通过 连接的发起,交换,核实来进行身份验证和加密。通过协商确定基带数据分 组大小。同时还控制无线设备的节能模式和工作周期,以及蓝牙网络内单元 设备的连接状态。 逻辑链路控制与适应协议(l2cap)位于基带协议层之上,属于数据链路 层,是一个为高层传输和应用层协议屏蔽基带协议的适配协议。 业务搜索协议(sdp),它可以查询设备信息、业务及业务特征,并在 查询之后建立两个或多个蓝牙设备间的连接。 android的蓝牙协议栈 android的蓝牙协议栈使用了 bluez,它是当前最成熟的开 源蓝牙协议栈。同时它也是 经过sig认证的蓝牙协议栈。 bluez是linux的官方蓝牙协 议栈,android会使用它也是 理所当然的了。 (如图)android在框架层支持gap,sdp,rfcomm等规范。 而headset/handfree,则用于头戴耳机的免提接听功能,它与电话程序相关。 蓝牙技术介绍 常用类介绍常用类介绍 蓝牙的使用介绍 项目演练 课程目录课程目录 bluetoothadapter介绍 android为开发者提供的蓝牙开发的api位于android.bluetooth包中。 首先介绍bluetoothadapter,本地蓝牙适配器,它是所有蓝牙通信及蓝牙模 块相关操作的关键和入口。 我们可以使用bluetoothadapter来完成一下操作: 发现其他蓝牙设备 获得已配对设备列表 用已知的mac地址实例化一个蓝牙设备 创建一个bluetoothserversocket来监听其它蓝牙设备的通信 bluetoothadapter介绍 下面列举bluetoothadapter类的重要方法: getdefaultadapter(),获取当前蓝牙适配器的实例(静态方法) checkbluetoothaddress(string address),根据给定的蓝牙地址检查当 前设备的地址是否与之匹配(静态方法) enable(),打开蓝牙服务 disable(),关闭蓝牙服务 startdiscovery(),开始搜索蓝牙设备 canceldiscovery(),取消搜索 getremotedevice(string address),根据蓝牙地址获取远程蓝牙设备 getbondeddevices(),获取已绑定的蓝牙设备 listenusingrfcommwithservicerecord(string name,uuid uuid) 根据名称和uuid创建bluetoothserversocket bluetoothdevice介绍 bluetoothdevice类被用于描述一个远程蓝牙设备,它拥有设备的名字、地址、 连接状态等属性。它是对蓝牙设备硬件地址的一个轻量级包装,可从 bluetoothadapter的getremotedevice等方法中获取当前蓝牙设备列表 bluetoothdevice有一个重要的方法: bluetoothsocket createrfcommsockettoservicerecord(uuid uuid) 根据uuid创建一个此蓝牙设备的rfcomm蓝牙安全输出连接。然后可 以利用该连接进行安全的写操作。 其中uuid可以使用字符串去创建,或者使用随机值: uuid.fromstring(“fa87c0d0-afac-11de-8a39-0800200c9a66“); uuid.randomuuid(); bluetoothserversocket介绍 bluetoothserversocket是一个蓝牙socket服务器,它将监听蓝牙的连接请求 (类似于tcp的serversocket)。 想要连接两个蓝牙设备,其中一个必须打开bluetoothserversocket 。当一个 远程蓝牙设备发出一个连接请求并被接受时,bluetoothserversocket将返回 一个已蓝牙连接,通过该连接可以完成两个设备间的输入输出等操作。 可以使用bluetoothadapter.listenusingrfcommwithservicerecord()方法来 创建一个bluetoothserversocket服务。 然后使用accept()方法接受蓝牙远程连接请求,该方法会阻塞,直到蓝牙务返 回一个蓝牙连接。使用该连接可以进行蓝牙设备间的数据交互,使用完毕后 别忘了调用close()方法关闭蓝牙服务。 bluetoothsocket介绍 bluetoothsocket代表蓝牙的客户端socket连接(与bluetoothserversocket相 对应, 它类似于tcp的socket)。它使得应用程序可以通过inputstream或 者outputstream与其他蓝牙设备交换数据。 使用bluetoothdevice.createrfcommsockettoservicerecord()可以得到一个 该蓝牙设备的bluetoothsocket连接。 下面是bluetoothsocket的方法说明: close(),关闭 connect(),连接 getinptustream(),获取输入流 getoutputstream(),获取输出流 getremotedevice(),获取当前连接或正在连接中的远程蓝牙设备 bluetoothclass介绍 bluetoothclass描述了一个蓝牙设备的通用特性和能力,它提供了一系列描 述一个设备的主要和次要设备类别和服务的只读属性。 尽管bluetoothclass并能很准确的描述一个设备所有的蓝牙profile(配置)和 所支持的服务,但它可以作为设备类型的参考或提示提示。 bluetoothclass.device定义了所有设备类的常量。 bluetoothclass.device.major定义了所有主要设备类的常量。 bluetoothclass.service定义了所有服务类的常量。 蓝牙技术介绍 常用类介绍 蓝牙的使用介绍蓝牙的使用介绍 项目演练 课程目录课程目录 使用蓝牙的步骤 android下建立一个蓝牙连接,必须经过以下几个步骤: 发现(搜索)周围的蓝牙设备,并使用broadcastreceiver得到结果 同已发现的设备进行配对(已配对的设备可以跳过此步骤) 连接并发现蓝牙设备具备的服务 最后可以利用已有服务进行数据通讯以及管理蓝牙设备 使用android的蓝牙模块时需要如下权限: 注意:android在2.0才开始对蓝牙的支持才有所改善,所以要求开发的最小 版本号在5以上()。 获取本地适配器 首先需要创建bluetoothadapter实例: 然后需要确保蓝牙可用,如果不可用,需要启动蓝牙功能,通常可以使用下 面第一个方法弹出是否启动蓝牙的提示框。或者使用第二个方法直接启动。 if (!ba.isenabled() int request_enable_bt = 2; intent enableintent = new intent( bluetoothadapter.action_request_enable); startactivityforresult(enableintent, request_enable_bt); bluetoothadapter ba = bluetoothadapter.getdefaultadapter(); if (!ba.isenabled() ba.enable(); 如何接受搜索到的设备 android可以使用broadcastreceiver与bluetoothdevice.action_found, bluetoothadapter.action_discovery_finished行为来获得结果 (最后别忘了还需要注册和注销该broadcastreceiver及其对应的两个行为) private final broadcastreceiver mreceiver = new broadcastreceiver() public void onreceive(context context, intent intent) string action = intent.getaction(); if (bluetoothdevice.action_found.equals(action) bluetoothdevice device =intent.getparcelableextra( bluetoothdevice.extra_device); /device就是新搜索到的设备 else if (bluetoothadapter.action_discovery_finished .equals(action) /搜索完成 ; 创建蓝牙socket服务 首先我们需要一个蓝牙socket服务。启动一个线程,用来注册一个具有名称 和唯一识别号(uuid)的bluetoothserversocket,它会一直监听客户端 (bluetoothsocket)的请求,并做出相应的处理。注册蓝牙服务的代码如下: 然后即可使用bluetoothserversocket的accept()方法获得蓝牙socket连接 string name = “bluetoothchat“; uuid my_uuid = uuid.fromstring( “fa87c0d0-afac-11de-8a39-0800200c9a66“); bluetoothserversocket bss = ba.listenusingrfcommwithservicerecord(name, my_uuid); bluetoothsocket bs = bss.accept(); 连接蓝牙socket服务 通过上一步的服务的唯一标识号(uuid)就可以创建一个蓝牙socket连接 (bluetoothsocket),然后使用bluetoothsocket的connect()方法进行连接 到此,我们介绍了整个蓝牙连接模块的基本操作及步骤。下面将以实际项目 向大家演示蓝牙的使用 / 获取给定的蓝牙设备的socket bluetoothsocket ms = device.createrfcommsockettoservicerecord(my_uuid); / 与服务器进行连接 mms.connect(); 蓝牙技术介绍 常用类介绍 蓝牙的使用介绍 项目演练项目演练 课程目录课程目录 项目演练 本次演练将完成一个搜索和选择蓝牙设备的通用组件。它可以搜索附近的蓝 牙设备,并以列表的形式展示出来(分为已配对和新设备两个列表)。当用 户选择列表项,则本组件会返回当前选中设备的蓝牙地址。 首先创建bluetoothtest项目,并实现 列表和列表项的layout。 然后再androidmanifest.xml中添加蓝牙 访问权限: android.permission.bluetooth_admin android.permission.bluetooth 项目演练 实现蓝牙设备的搜索方法 并且在主界面的搜索按钮中调用该方法 private void dodiscovery() setprogressbarindeterminatevisibility(true); settitle(r.string.scanning); findviewbyid(r.id.title_new_devices).setvisibility( view.visible); / 如果之前正在执行搜索任务,则先停止搜索 if (ba.isdiscovering() ba.canceldiscovery(); / 开始搜索蓝牙设备 ba.startdiscovery(); 项目演练 定义broadcastreceiver,用于接收蓝牙搜索结果 private final broadcastreceiver mreceiver = new broadcastreceiver() public void onreceive(context context, intent intent) string action = intent.getaction(); if (bluetoothdevice.action_found.equals(action) bluetoothde

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论