欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    基于Android的手机蓝牙通讯毕业论文.doc

    • 资源ID:2394059       资源大小:850KB        全文页数:33页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于Android的手机蓝牙通讯毕业论文.doc

    福建船政交通职业学院毕业论文(设计)题 目: 基于Android的手机蓝牙通讯 系 部: 信息技术与工程系 姓 名: 学 号: 114106219 专 业: 嵌入式系统工程 年级班级: 11 级 (2)班 指导教师: 二一 四 年 五 月目 录引 言11 课题概述21.1 蓝牙和安卓系统的发展趋势21.2 课题目标及意义41.3 课题主要工作42 系统分析52.1系统需求分析52.2 关键技术73 系统总体设计113.1. 设计思想113.2 系统框架123.3 各模块详细功能144 详细设计174.1 系统架构174.2 蓝牙的设置及代码184.3 服务端的连接和数据的收发225 系统测试255.1 模块功能测试255.3 已解决的问题27参考文献30基于Android手机蓝牙通讯张兴文摘 要:本文首先介绍了安卓系统和蓝牙的发展历史现状以及背景,接着对系统的设计目标、开发技术、设计方案和数据库结构设计等做了简要明了的介绍。最后重点对模块功能、代码实现进行了较详细的阐述。 笨设计是基于Android系统,采用客户端/服务器架构模式通过Java提供的Socket类来连接客户机和服务器并使客户端和服务器之间相互通信,由于聊天是多点对多点的,Java提供的多线程功能用多线程可完成多点对多点的聊天。所用到的开发工具是 eclipse 。系统主要分为客户端,服务端部分的基本功能主要有在蓝牙的有效距离范围内通过蓝牙两部手机进行配对,在通过蓝牙通讯这个软件进行聊天,聊天可以多人群聊也可以单个人私聊。如果你有需要发送的文件也可以通过这个软件发送,接受到的软件直接存放在手机的SD卡的根目录下;每一部手机既是服务端,也是客服端。 关键词: Android系统 蓝牙 客户端/服务器架构模式 Socket类 聊天 发文件引 言蓝牙即时通讯也就是安卓平台下的即时通讯。随着android系统的发展成熟,在即时通讯这一版块逐渐发展成一个综合化的信息平台。在Android 平台上开发即时通讯系统,它能够使用户在移动客户端上登录服务器,方便、迅捷地收发即时消息。随着研究的深入,可以在该系统上实现图片的传输和接收,以及其他一些功能,这样可以使该系统功能更加多样化。通讯系统架构采用C S 模式,即客户端服务器的体系结构。客户端是基于Android 平台进行开发,通过蓝牙建立连接,通过服务器实现Android 客户端之间的即时通讯。目前随着科技的快速发展,快捷,方便,实惠的通讯方式越来越被大众所需要。而手机蓝牙通讯就正好满足了人们的要求。只要你有一部蓝牙手机你就可以跟人聊天交流发文件,不管是私聊还是群聊。随着技术的发展,蓝牙技术越来越成熟,那么蓝牙通讯将被使用的越来越广泛。这个设计是基于Android系统,采用客户端/服务器架构模式通过Java提供的Socket类来连接客户机和服务器并使客户端和服务器之间相互通信,主要的功能就是在蓝牙的有效距离内,你可以跟你任意想聊天的对象进行交流,传送文件。1 课题概述1.1 蓝牙和安卓系统的发展趋势自从1998年提出蓝牙技术以来,蓝牙技术的发展异常迅速。蓝牙Bluetooth作为一种新的短距离无线通信技术标准,受到全世界越来越多工业界生产厂家和研究机构的广泛关注。成立了世界蓝牙组织Bluetooth SIG,采用技术标准公开的策略来推广蓝牙技术,现已发展成为一个相当大的工业界高新技术标准化组织,全球支持蓝牙技术的2000多家设备制造商都已经成为它的会员,一项公开的、全球统一的技术规范得到了工业界如此广泛的关注和支持在以往是罕见的。近年来,世界上一些权威的标准化组织,也都在关注蓝牙技术标准的制定和发展。例如,IEEE的标准化机构,也已经成立了80215工作组,专门关注有关蓝牙技术标准的兼容和未来的发展等问题。IEEE 802151 TG1就是讨论建立与蓝牙技术10版本相一致的标准;IEEE 802152 TG2是探讨蓝牙如何与IEEE 80211b无线局域网技术共存的问题;而IEEE 802153 TG3则是研究未来蓝牙技术向更高速率(如10-20Mbitss)发展的问题。国内的一些生产厂家与研究部门也准备开始组织蓝牙技术产品的开发。由来自国家主管部门、企业界、学术界以及研究生产机构的领导、专家、教授等权威人士发起成立的中国蓝牙技术发展与应用论坛,吸引了众多关注蓝牙技术的各界人士,还组织国内各界与世界蓝牙组织SIG的代表,就双方所关注的问题进行了认真的讨论。并就双方今后进一步加强联系、共享蓝牙技术信息资源、共同促进蓝牙技术在中国的推广与应用等问题达成共识。蓝牙是取代数据电缆的短距离无线通信技术,可以支持物体与物体之间的通信,工作频段是全球开放的24GHz频段,可以同时进行数据和语音传输,传输速率可达到10Mbs,使得在其范围内的各种信息化设备都能实现无缝资源共享。 蓝牙技术的应用被认为非常广泛而且极具潜力。它可以应用于无线设备(如PDA、手机、智能电话、无绳电话)、图像处理设备(照相机、打印机、扫描仪)、安全产品(智能卡、身份识别、票据管理、安全检查)、消费娱乐(耳机、MP3、游戏)汽车产品(GPS、ABS、动力系统、安全气袋)、家用电器(电视机、电冰箱、电烤箱、微波炉、音响、录像机)、医疗健身、建筑、玩具等领域。蓝牙行业对于市场的持续增长感到欣慰,现在没有人再质疑它的生命力。2002年,400余种蓝牙产品的销量总共达到了3000万件;而2003年的数字是2002年的2倍。In-StatMDR公司预测,蓝牙市场的规模在2007年将膨胀到6亿件。爱立信技术授权公司的总裁Maria Khorsand表示:“在如此艰难的经济环境下,蓝牙是少数仍在增长的产品之一”。自从2008年9月22日,美国运营商T-Mobile USA 在纽约正式发布了第一款基于android安卓的手机后,更多的移动设备厂商看到了安卓android的光明前景,并纷纷加入其中,android甚至已经涉足上网本市场了其发展前景广阔涉及领域越来越大。随着android手机的普及,android应用的需求势越来越大,这个潜力巨大的市场,已经吸引无数软件开发厂商和开发者投身其中。android的开放性使其比苹果和黑莓对年轻人更具吸引力,更能吸引年轻人群的关注和喜爱。在18岁至24岁族群中,Android是最多人选用的操作系统。同时因为Android系统的开放性为Android平板电脑的快速发展奠定了基础,也才能促使其吸引着越来越多的用户接受和使用。同时Android还具有应用程序无界限、应用程序是在平的的条件下创建的、应用程序可以轻松的嵌入网络、应用程序可以并行运行等众多出色的品质。具有其他操作系统无法比拟的优势和发展空间。    安卓系统在不断升级完善,如今,平板电脑市场已成为Android与苹果iOS除了智能手机领域之外争夺的第二个焦点。一直以来,多数新闻仍然显示iPad在平板市场的霸主地位难撼。但是,以Android领头的平板电脑正以高速的增长对苹果iPad造成冲击。放眼整个平板市场,生产Android平板电脑的确是大势所趋。世界上所有的顶级设备制造商,三星、索尼、摩托罗拉、联想、LG、宏碁、HTC、华硕,几乎每一家都在卖Android平板电脑。  安卓给用户的触屏体验非常好,安卓手机在高端机领域泛滥的同时也在中低端机领域涉足,这将给安卓系统手机带来非常好的前景,从目前的市场上来看,安卓系统能够在短短的时间里面,占据着超大的市场份额,而且还有非常好的信誉口碑,绝对不是一两个人吹捧出来的,那是因为安卓手机真的能够让人体验到好,才能够有如此高的评价。所以说,虽然目前安卓手机还是存在一定问题上的不足,很多问题都有待需要改善,这就说明安卓系统处于一种发展状态,那么它的生命力就会很强,前景很广阔。1.2 课题目标及意义蓝牙即时通讯也就是安卓平台下的即时通讯。随着android系统的发展成熟,在即时通讯这一版块逐渐发展成一个综合化的信息平台。在Android 平台上开发即时通讯系统,它能够使用户在移动客户端上登录服务器,方便、迅捷地收发即时消息。随着研究的深入,可以在该系统上实现图片的传输和接收,以及其他一些功能,这样可以使该系统功能更加多样化。通讯系统架构采用C S 模式,即客户端服务器的体系结构。客户端是基于Android 平台进行开发,通过蓝牙建立连接,通过服务器实现Android 客户端之间的即时通讯。随着技术的发展,蓝牙技术越来越成熟,那么蓝牙通讯将被使用的越来越广泛,使得人与人之间的交流越来越方便快捷。1.3 课题主要工作课题组所要做的工作不仅仅是开发出一个基于Android系统的蓝牙通讯线软件,也是我们对于Android的进一步的了解和研究,是对于Android平台下Java语言中的Java提供的Socket类于,Java提供的多线程和C/S模式(客户端服务器)解决方案的进一步的学习很研究。本设计采用Java语言中的Socket类和多线程实现多对多的聊天功能和文件的接受和发送。通过BluetoothAdapter 类获得蓝牙地址,BluetoothSocket 类获得输入、输出流,InputStream 类读取输入流,OutputStream 类写入输出流。通过现在几乎每一部手机都有的蓝牙连接,在安装本设计额,你就可以在蓝牙的有效距离内尽情的和你的朋友很亲人沟通交流,不管是一对一的沟通还是多人群聊,而不要再去担心话费和流量问题。有过你有什么文件和照片要发送给你的亲朋好友,你也可以通过这个设计发送,发送的文件则会直接的存放在对方的SD卡的根目录下。设计的主界面没有可以的去修饰,简洁明了,为的就是用户能够很容易的就掌握操作方法。界面上的按钮使人一目了然,马上就知道怎么操作。 2 系统分析2.1系统需求分析2.1.1系统需要解决的主要问题用户进入运用界面后首先要确认自己的手机蓝牙是否已经开启,蓝牙开启后在扫描附近的相同用户,选择一个对象进行聊天,所以该设计要有对象的选择功能。当用户想发送自己手机中的文件或者图片给自己的聊天对象时,当点击发送文件这个按钮时就应当跳到手机的SD卡的根目录下,这就要求该设计要有文件的收发功能和扫描SD卡的文件功能。挡在聊天的时候,当信息发送成功和接受成功时就需要提醒用户。有时候聊往往不会聊个人聊,有可能涉及到三个或者更多的人一起群聊。涉及到群聊就会涉及到创建组的问题,用户选择自己想要群聊的对象加到创建的组中进行群聊。本设计是为了满足运用蓝牙来聊天的需求而开发的,在Android平台上运行,该设具有一对一的聊天功能和发送接受文件功能,也能多个人创建组群聊的功能。不管是发送信息还是文件或者是群聊的消息都有提醒功能,提醒用户信息和文件发送、接受是否成功。2.1.2 功能模块划分本手机蓝牙通讯设计可以分为三个主要功能进行设计,这三个功能模块分别为(1) 一对一私聊:一对一私聊模块可以实现用户已用户间的一对一的聊天沟通。(2) 发送和接受文件:发送和接受文件模块可以实现用户在一对一的私聊模式下可以见自己手机SD卡中的文件很图片发送到对方的手机中,并且直接存放在对方的手机SD卡的根目录下。(3) 多对多群聊:多对多群聊模块可以实现多个用户通过创建聊天组进行群聊。2.1.3 数据流图下面是设计的数据流图:图2-1顶层数据流图 图2-2 一层数据流图 图2-3 二层数据流图图2-1 顶层数据流图 图2-2 一层数据流图2-3 二层数据流图 2.2 关键技术2.2.1开发技术本设计是基于Android平台的一个设计。Android是Google开发的基于linux平台的开源智能手机操作系统。Android应用程序由一些零散的有联系的组件组成,通过一个工程manifest绑定在一起,在manifest中,描述了每一个组件以及组件的作用。 Android应用程序概述一般来说Android应用程序主要由四部分组成:Activity(活动对象)、Broadcast Receiver(广播接收器)、Service(服务)、ContentProvider(内容提供者)。然而,并不是所有的程序都需要全部部分,可以由上面的一个或几个来组建。使用某些组件构建Android应用程序时,需要在AndroidManifestxml文件里进行声明。(1)Activities(活动)在Android应用程序中,Activity一般代表手机的一屏即用户可见的一个界面。An droid应用程序的运行过程就是在不同的Activity之间切换的过程。每个Activity都有自己的视图和事件对应2。大多数应用程序都有多个Activity。每一个画面对应于你的应用程序,将会是Activity类的扩展。Activity使用Views去构建UI来显示信息和响应用户的行为。就桌面开发而言,一个Activity相当于一张Form。(2)Services(服务)Service是具有长生命周期并且没有用户界面的代码 通过Start Service(Intent service)可以来启动一个Service,通过ContextbindService ()可以绑定一个Service。当已经连接上了一个服务,就可以使用服务提供的外部接口来和服务通讯了Android应用程序中不可见的“工人”3。 Service组件运行时不可见,但它负责更新的数据源和可见的Activity,以及触发通知。它们常用来执行一些需要持续运行的处理,当你的Activity已经不处于激活状态或不可见。(3)Content(内容)Content Provider(内容提供器)就是一个类。作为应用程序之间唯一的共享数据的途径,它实现了一个标准的方法集合,其他应用程序可以使用这些方法在应用程序之间共享数据。提供共享的数据存储。Content Provider用来管理和共享应用程序的数据库。在应用程序间,Content Provider是共享数据的首选方式。这意味着,你可以配置自己的Content Provider去存取其他的应用程序或者通过其他应用程序暴露的Content Provider去存取它们的数据1。Android设备本身包含了几个Content Provider来访问像联系人信息等有用的数据库。(4)Intents(意图)简单的消息传递框架。使用Intent,你可以在整个系统内广播消息或者给特定的Activity或者服务来执行你的行为意图。系统会决定那个(些)目标来执行适当的行为。(5)Broadcast Receivers(广播接收器)Broadcast Receiver是一个接受广播消息并响应的组件。广播消息可以由系统产生,例如时区发生变化、电池电量发生变化等。同时也可以由其他应用程序产生,对于这两种广播。在Broadcast receiver里都可以设置相应的过滤规则来进行接收。Broadcast Receiver是Intent广播的“消费者”。通过创建和注册一个Broadcast Receiver,应用程序可以监听符合特定条件的广播的Intent。Broadcast Receiver 会自动的启动你的Android应用程序去响应新来的Intent。Broadcast Receiver是事件驱动程序的理想手段4。(6)Notifications(通知)用户通知的框架。Notification用来在不需要焦点或不中断它们当前Activity的情况下提示用户。它们是Service或Broadcast Receiver获得用户注意的首选方式。例如,当设备收到文本信息或外部来电时,它通过闪光,发声,显示图标或显示对话框信息来提醒你5。2.2.2所用工具1、Android代码编写工具:eclipseEclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如C+和Python的开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE6。2、功能模拟工具: Android模拟器Android模拟器能够模拟除了接听和拨打电话外的所有移动设备上的典型功能和行为。Android模拟器提供了大量的导航和控制键,你可以通过鼠标或键盘点击这些按键来为你的应用程序产生事件。同时它还有一个屏幕用于显示Android自带应用程序和你自己的应用程序。为了便于模拟和测试应用程序,Android模拟器允许你的应用程序通过Android平台服务调用其他程序、访问网络、播放音频和视频、保存和传输数据、通知用户、渲染图像过渡和场景。Android模拟器同样具有强大的调试能力,例如能够记录内核输出的控制台、模拟程序中断(比如接受 短信或打入电话)、模拟数据通道中的延时效果和遗失。2.2.3 运行环境1、硬件环境² Android系统的智能手机2、 软件要求² 手机系统:Android² Android4.0.0及其以上3 系统总体设计3.1. 设计思想蓝牙通信,类似于TCP通信,都需要有服务器端和客户端。在本聊天系统中,一部Android 手机作为蓝牙服务器端,另外两台Android手机作为蓝牙客户端。客户端分别连到服务器,给服务器发送并接收文本消息;服务器也能够给客户端发送并接收文本消息。前面已经提到,本系统主要用到的Android 系统组件为Activity 和Service。在Android的设计中,每个Activity 都是一个独立的进程,每个Service 也是一个独立的进程,而Activity要与Service 进行通信,就是跨进程的通信,这时就需要使用Binder 机制了。Android 对100 Binder 机制进行了抽象,定义了 IBinder 接口。在上层,其具体实现是由 AIDL(AndroidInterface Definition Language,即Android 接口描述语言)来完成的。 本文在蓝牙通信服务器端和客户端都使用了MVC 模式,采用分层的结构,具体分为表示层、控制层、数据交换层,对应MVC 设计模式中的View、Controller 和Model。软件总体架构如下图图3-1 和图3-2所示。StartDiscoverableModeBtServer connection、ConnectionService 图3-1 服务器结构ServerListActiveBtClient Connection ConnectionService图3-2 客户端结构表示层向用户展示模型的状态,在本软件中是以每个Activity 的对应的页面、对话框和 一些显示控件所展现,一般以 layout 文件夹下的布局文件承载。主要用来输入和显示文本消息、打开蓝牙“可被查找”功能及搜索蓝牙设备。控制层负责表示层和业务层的流程控制,一方面将表示层的调用发到业务层请求处理;另一方面将业务层的处理结果反应到表示层进行界面上的显示。业务和数据交互层,封装了蓝牙数据传输的核心操作,如创建socket 创建通道、传输数据、处理输入输出流等。它可以通过控制层被调用,也可以在收到连接请求或文本消息时把结果返回给控制层,进而返回到表示层7。采用 MVC 设计模式,对整个代码进行了分层,使程序结构更加清晰、代码更加健壮,提高了模块化程度,各模块职责明确,高效率的处理相应事件。3.2 系统框架3.2.1 系统总体框架手机蓝牙手机蓝牙通讯设计阶段的主要目的是将设计分析阶段所提出的反映了用户手机蓝牙通讯信息需求的系统逻辑方案转换成可以实施的基于计算机与通信系统的物理(技术)方案。具体要求对系统进行功能分解,不断下去,直到分解成含义明确,功能单一的单元功能模块,从而绘制出系统的功能模块图,即HIPO图。此设计的HIPO图3-2如示。用户扫描多对多群聊一对一私聊图3-3系统HIPO图用户扫描模块,好友查找主要在这一模块中,用户可以根据实际情况,将用已近蓝牙配对的其他用户设置为聊天对象。并且提示用户选中的聊天对象是否有在线。一对一私聊模块,该模块的主要功能是用户根据选择的聊天对象进行一对一的单独聊天沟通,并且可以发送和接受文件或者图片,发送文件的时候点击按钮时直接跳到用户的手机SD卡的根目录下,接受的文件也是自己存放在手机的SD卡根目录下。多对多群聊模块,该模块的主要功能的主要功能是用户可以自己创建一个聊天组,把扫描到的其他用户加到聊天组中进行多对多的群体聊天沟通。3.2.2 系统实现原理 手机蓝牙通讯的设计跟利用的网络连接的设计有着许多不同的地方,网络连接的聊天设计所考虑的因素,例如,需要对布局进入大量美化以及动画设计等等,而即时通讯只要提供满足访客双方直接实时聊天即可。因此,在设计聊天系统的过程中,必须要考虑好以下几个设计要点:在蓝牙上的聊天程序一般都是以服务端提供服务端连接响应,使用者通过客户端程序连接服务端,就可以与在同一服务端上的用户交谈,这是一个面向连接的通信过程。因此,程序要在C/S框架下,实现服务器端和客户端两部分程序。(图3-1 系统实现原理图)8ServerClient建立服务端Socket创建连接Socket向服务端发送请求等待并接受连接请求建立连接接受请求后创建连接SocketIutputStreamIutputStream开始通讯OutputStreamOutputStream关闭Sochet关闭Sochet结束通讯图3-1 系统实现原理图3.3 各模块详细功能3.3.1服务器端结构蓝牙聊天系统服务器架构:在 BTServer 里,有两个ListView,分别用来显示从不同客户端接收到的文本消息,两个输入框,用来输入文本消息发给客户端。这是程序的界面构成。 启动程序后,到StartDiscoverableModeActivity 界面,提示用户设置本设备“可被查找”。“可被查找”的含义是其他蓝牙设备在搜索的情况下,能获得服务器端的存在及其相关信息。为了隐私保护及安全,蓝牙设备默认是关闭状态,需要在用户的同意下才打开并设置为可被查找。服务器进行初始化操作,包括构造OnMessageReceivedListener 用以监听消息到来事件;启动ConnectionService,由它来处理发送和接收文本消息。在 ConnectionService 里,创建 ConnectionWaiter 线程,在 ConnectionWaiter 线程里创建BluetoothServerSocket 监听连接请求。在有连接请求的时候,ConnectionService 里的ConnectionWaiter 线程接收请求,创建BluetoothSocket,并把远端请求的地址address 和这个BluetoothSocket 放到HashMap 里,用来管理socket。接着启动BtStreamWatcher 线程,用来监听这个socket 里的输入输出流,把此线程也放到另外一个HashMap 140 里。接着建新的ConnectionWaiter 线程,继续监听新的连接请求。也就是说,创建多个信线程,并放到HashMap 里进行管理,以完成蓝牙的一对多通信9。BtStreamWatcher 用来处理输入输出流。在BTServer 界面上进行输入的时候,根据目的地址(address)的不同,从HashMap 里取出对应的socket,由它来向此address 发送消 息。接收到文本消息时,回调OnMessageReceivedListener 来通知上层,在界面上显示。(图3-5)图3-5 服务器端结构 3.3.2客服端结构客服端蓝牙聊天系统客户端架构:在 BtClient 里,有一个listView 和一个输入框,分别用来显示接收到的服务器端发送的消息和输入文本消息向服务器端发送。这是程序的界面构成。启动程序后,客户端进行初始化操作,包括构造 OnMessageReceivedListener、OnConnectionServiceReadyListener;启动ConnectionService。备工作完毕后,回调OnConnectionServiceReadyListener,启动ServerListActivity 界面,显示搜索到的蓝牙设备, 点击服务器端所在设备地址,通过Connection 调用ConnectionService 的connect()函数,来向服务器发起连接请求。等服务器接受连接请求后,返回 BluetoothSocket,把服务器端地址 address 和这个BluetoothSocket 放到HashMap 里,用来管理socket。接着启动BtStreamWatcher 线程,用来监听这个socket 里的输入输出流,把此线程也放到另外一个HashMap 里。BtStreamWatcher 用来处理输入输出流。在BTClient 界面上进行输入的时候,根据服务器地址,从HashMap 里取出对应的socket,由它来向此服务器发送消息。接收到文本消息时,回调OnMessageReceivedListener 来通知上层,在界面上显示10。启动第二个客户端,进行同样操作。这样,本系统就完成了基于蓝牙的一对多人聊天。(图3-6)图3-5 客户端结构 4 详细设计上文中主要对整个系统的需求进行分析和数据库的设计进行介绍,紧接着下文将通过说明并演示手机蓝牙通讯的操作流程以及截图来介绍手机蓝牙通讯软件,并对一些关键性的代码进行注释解释。4.1 系统架构Src里主要是系统的框架,Src里面存放的是Activity程序,或者是以后的其他组件。如图 4-1所示 图 4-1 系统框架图1 drawable-mdpi:存放图片的文件夹,存放中分辨率的图片。如图 4-2所示 图 4-2 系统框架图2 layout: 存放所有的布局管理器的配置信息。如图 4-3所示 图 4-3系统框架图3 4.2 蓝牙的设置及代码4.2.1权限设置对蓝牙的操作需要相应的权限,在AndroidManifest.xml文件里的如下两行语句:<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /><uses-permission android:name="android.permission.BLUETOOTH" />4.2.2 获取蓝牙设备代码执行到 BluetoothChat.onCreate 函数,与蓝牙相关的代码如下:mBluetoothAdapter=BluetoothAdapter.getDefaultAdapter();mBluetoothAdapter 是一个BluetoothAdapter(蓝牙适配器),上面的代码就是获取Android手机的蓝牙设备,通过它来操作蓝牙设备11。4.2.3 打开蓝牙设备手机上的蓝牙设备可能是处于关闭状态的,聊天前需要打开它。代码执行到 BluetoothChat.onStart 函数:if(!mBluetoothAdapter.isEnabled()Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);startActivityForResult(enableIntent, REQUEST_ENABLE_BT);mBluetoothAdapter.isEnabled() 返回 true 表示蓝牙设备处于打开状态,否则表示关闭状态。startActivityForResult 将启动一个界面,询问用户是否打开蓝牙设备。当用户单击“确定”按钮的时候,该界面会被销毁,然后系统会调用BluetoothChat.onActivityResult函数。public void onActivityResult(int requestCode, int resultCode, Intent data)switch (requestCode) case REQUEST_ENABLE_BT:if (resultCode = Activity.RESULT_OK) setupChat();此时的requestCode将是startActivityForResult的第二个参数,即REQUEST_ENABLE_BT。用户单击了“确定”按钮,因此 resultCode 等于Activity.RESULT_OK。结果,setupChat 将被调用。setupChat 最重要的工作就是创建了一个 BluetoothChatService 对象,其代码如下:mChatService = new BluetoothChatService(this, mHandler);BluetoothChatService 可用于服务器,创建监听线程,监听来自客户端的连接请求;也可以用于客户端,连接服务器。BluetoothChatService 构造函数的第一个参数没有任何作用。第二个参数比较重要:它用于接收来自BluetoothChatService的反馈消息,如:BluetoothChatService完成读、写操作将发送MESSAGE_READ和MESSAGE_WRITE消息12。4.2.4 创建监听线程监听线程BluetoothChat.onResume,其中最关键的代码是mChatService.start();它调用的是BluetoothChatService.start函数。在这个函数里,创建了两个监听线程:mSecureAcceptThread = new AcceptThread(true);mInsecureAcceptThread = new AcceptThread(false);mSecureAcceptThread 用于监听加过密的连接请求,mInsecureAcceptThread用于监听未加密的连接请求。它们最大的区别在于:创建服务器套接字时,使用的函数不同,代码在AcceptThread的构造函数里:if (secure) tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME_SECURE,MY_UUID_SECURE); else tmp = mAdapter.listenUsingInsecureRfcommWithServiceRecord(NAME_INSECURE, MY_UUID_INSECURE);可见:listenUsingRfcommWithServiceRecord用于监听加密连接,listenUsingInsecureRfcommWithServiceRecord用于监听未加密连接。这两个函数的第一个参数用处不大,第二个参数很重要,即服务UUID。客户端连接服务器时,需要知道服务器提供的服务UUID是什么,否则无法连接。有些服务是固定的,如:串行口服务,其UUID就是00001101-0000-1000-8000-00805F9B34FB。在本例中,UUID是随机生成的。为了保证这个UUID不重复,可以使用Windows API 函数 CoCreateGuid。在多线程AcceptThread.run里,线程在socket = mmServerSocket.accept();这个地方被阻塞。当有客户端连接的时候,accept函数才会返回,执行下面的代码。accept函数返回的套接字socket是通讯套接字和服务端的监听套接字mmServerSocket是不一样的,切莫混淆。在AcceptThread.run里,connected(socket, socket.getRemoteDevice(),mSocketType);将创建多线程ConnectedThread,它的主要作用就是不断轮询客户端是否有数据发送过来,有的话就读取并通知mHandler。也就是说,两台手机只要运行了BluetoothChat这个程序,就都是服务器了。接下来的操作需要确定两台手机的身份:一台作为服务器,另一台作为客户端。4.2.5 使设备可见作为服务器的手机,其蓝牙设备必须能被客户端搜索到。需要对此进行设置。用户单击服务器手机上的菜单项“discoverable”,将执行到BluetoothChat. onOptionsItemSelected函数里的ensureDiscoverable函数。public boolean o

    注意事项

    本文(基于Android的手机蓝牙通讯毕业论文.doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开