基于Android的手机蓝牙通讯 毕业论文.doc_第1页
基于Android的手机蓝牙通讯 毕业论文.doc_第2页
基于Android的手机蓝牙通讯 毕业论文.doc_第3页
基于Android的手机蓝牙通讯 毕业论文.doc_第4页
基于Android的手机蓝牙通讯 毕业论文.doc_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

福建船政交通职业学院 毕业论文 设计 题 目 基于 android 的手机蓝牙通讯 系 部 信息技术与工程系 姓 名 学 号 114106219 专 业 嵌入式系统工程 年级班级 11 级 2 班 指导教师 二 一 四 年 五 月 目目 录录 引 言 1 1 课题概述 2 1 1 蓝牙和安卓系统的发展趋势 2 1 2 课题目标及意义 4 1 3 课题主要工作 4 2 系统分析 5 2 1 系统需求分析 5 2 2 关键技术 7 3 系统总体设计 11 3 1 设计思想 11 3 2 系统框架 12 3 3 各模块详细功能 14 4 详细设计 17 4 1 系统架构 17 4 2 蓝牙的设置及代码 18 4 3 服务端的连接和数据的收发 22 5 系统测试 25 5 1 模块功能测试 25 5 3 已解决的问题 27 参考文献 30 基于 android 手机蓝牙通讯 张兴文张兴文 摘摘 要要 本文首先介绍了安卓系统和蓝牙的发展历史现状以及背景 接着对系统 的设计目标 开发技术 设计方案和数据库结构设计等做了简要明了的介绍 最后重 点对模块功能 代码实现进行了较详细的阐述 笨设计是基于 android 系统 采用客户端 服务器架构模式通过 java 提供的 socket 类来连接客户机和服务器并使客户端和服务器之间相互通信 由于聊天是多点 对多点的 java 提供的多线程功能用多线程可完成多点对多点的聊天 所用到的开发 工具是 eclipse 系统主要分为客户端 服务端部分的基本功能主要有在蓝牙的有效 距离范围内通过蓝牙两部手机进行配对 在通过蓝牙通讯这个软件进行聊天 聊天可 以多人群聊也可以单个人私聊 如果你有需要发送的文件也可以通过这个软件发送 接受到的软件直接存放在手机的 sd 卡的根目录下 每一部手机既是服务端 也是客服 端 关键词关键词 android 系统 蓝牙 客户端 服务器架构模式 socket 类 聊天 发文 件 福建船政交通职业学院毕业论文 1 引 言 蓝牙即时通讯也就是安卓平台下的即时通讯 随着 android 系统的发展 成熟 在即时通讯这一版块逐渐发展成一个综合化的信息平台 在 android 平台上开发即时通讯系统 它能够使用户在移动客户端上登录服务器 方便 迅捷地收发即时消息 随着研究的深入 可以在该系统上实现图片的传输和 接收 以及其他一些功能 这样可以使该系统功能更加多样化 通讯系统架 构采用 c s 模式 即客户端 服务器的体系结构 客户端是基于 android 平台进行开发 通过蓝牙建立连接 通过服务器实现 android 客户端之间的 即时通讯 目前随着科技的快速发展 快捷 方便 实惠的通讯方式越来越被大众 所需要 而手机蓝牙通讯就正好满足了人们的要求 只要你有一部蓝牙手机 你就可以跟人聊天交流发文件 不管是私聊还是群聊 随着技术的发展 蓝 牙技术越来越成熟 那么蓝牙通讯将被使用的越来越广泛 这个设计是基于 android 系统 采用客户端 服务器架构模式通过 java 提供的 socket 类来连接客户机和服务器并使客户端和服务器之间相互通信 主要的功能就是在蓝牙的有效距离内 你可以跟你任意想聊天的对象进行交 流 传送文件 福建船政交通职业学院毕业论文 2 1 课题概述 1 1 蓝牙和安卓系统的发展趋势 自从 1998 年提出蓝牙技术以来 蓝牙技术的发展异常迅速 蓝牙 bluetooth 作为一种新的短距离无线通信技术标准 受到全世界越来越多工业 界生产厂家和研究机构的广泛关注 成立了世界蓝牙组织 bluetooth sig 采 用技术标准公开的策略来推广蓝牙技术 现已发展成为一个相当大的工业界高 新技术标准化组织 全球支持蓝牙技术的 2000 多家设备制造商都已经成为它的 会员 一项公开的 全球统一的技术规范得到了工业界如此广泛的关注和支持 在以往是罕见的 近年来 世界上一些权威的标准化组织 也都在关注蓝牙技 术标准的制定和发展 例如 ieee 的标准化机构 也已经成立了 802 15 工作 组 专门关注有关蓝牙技术标准的兼容和未来的发展等问题 ieee 802 15 1 tg1 就是讨论建立与蓝牙技术 1 0 版本相一致的标准 ieee 802 15 2 tg2 是探讨蓝牙如何与 ieee 802 11b 无线局域网技术共存的问题 而 ieee 802 15 3 tg3 则是研究未来蓝牙技术向更高速率 如 10 20mbits s 发展的 问题 国内的一些生产厂家与研究部门也准备开始组织蓝牙技术产品的开发 由来自国家主管部门 企业界 学术界以及研究生产机构的领导 专家 教授 等权威人士发起成立的中国蓝牙技术发展与应用论坛 吸引了众多关注蓝牙技 术的各界人士 还组织国内各界与世界蓝牙组织 sig 的代表 就双方所关注的 问题进行了认真的讨论 并就双方今后进一步加强联系 共享蓝牙技术信息资 源 共同促进蓝牙技术在中国的推广与应用等问题达成共识 蓝牙是取代数据电缆的短距离无线通信技术 可以支持物体与物体之间 的通信 工作频段是全球开放的 2 4ghz 频段 可以同时进行数据和语音传输 传输速率可达到 10mb s 使得在其范围内的各种信息化设备都能实现无缝资 源共享 蓝牙技术的应用被认为非常广泛而且极具潜力 它可以应用于无线设 备 如 pda 手机 智能电话 无绳电话 图像处理设备 照相机 打印机 扫 描仪 安全产品 智能卡 身份识别 票据管理 安全检查 消费娱乐 耳机 mp3 游戏 汽车产品 gps abs 动力系统 安全气袋 家用电器 电视机 电 冰箱 电烤箱 微波炉 音响 录像机 医疗健身 建筑 玩具等领域 蓝牙 福建船政交通职业学院毕业论文 3 行业对于市场的持续增长感到欣慰 现在没有人再质疑它的生命力 2002 年 400 余种蓝牙产品的销量总共达到了 3000 万件 而 2003 年的数字是 2002 年的 2 倍 in stat mdr 公司预测 蓝牙市场的规模在 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 平板电脑 安卓给用户的触屏体验非常好 安卓手机在高端机领域泛滥的同时也在中 低端机领域涉足 这将给安卓系统手机带来非常好的前景 从目前的市场上来 看 安卓系统能够在短短的时间里面 占据着超大的市场份额 而且还有非常 好的信誉口碑 绝对不是一两个人吹捧出来的 那是因为安卓手机真的能够让 人体验到好 才能够有如此高的评价 所以说 虽然目前安卓手机还是存在一 定问题上的不足 很多问题都有待需要改善 这就说明安卓系统处于一种发展 福建船政交通职业学院毕业论文 4 状态 那么它的生命力就会很强 前景很广阔 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 卡的根目录下 设计的主界面没有可以的去修饰 简洁明了 为的就是用户能够很容易的 就掌握操作方法 界面上的按钮使人一目了然 马上就知道怎么操作 福建船政交通职业学院毕业论文 5 2 系统分析 2 1 系统需求分析 2 1 1系统需要解决的主要问题 用户进入运用界面后首先要确认自己的手机蓝牙是否已经开启 蓝牙开启 后在扫描附近的相同用户 选择一个对象进行聊天 所以该设计要有对象的选 择功能 当用户想发送自己手机中的文件或者图片给自己的聊天对象时 当点 击发送文件这个按钮时就应当跳到手机的sd卡的根目录下 这就要求该设计要 有文件的收发功能和扫描sd卡的文件功能 挡在聊天的时候 当信息发送成功 和接受成功时就需要提醒用户 有时候聊往往不会聊个人聊 有可能涉及到三 个或者更多的人一起群聊 涉及到群聊就会涉及到创建组的问题 用户选择自 己想要群聊的对象加到创建的组中进行群聊 本设计是为了满足运用蓝牙来聊天的需求而开发的 在android平台上运行 该设具有一对一的聊天功能和发送接受文件功能 也能多个人创建组群聊的功 能 不管是发送信息还是文件或者是群聊的消息都有提醒功能 提醒用户信息 和文件发送 接受是否成功 2 1 2 功能模块划分 本手机蓝牙通讯设计可以分为三个主要功能进行设计 这三个功能模块分 别为 1 一对一私聊 一对一私聊模块可以实现用户已用户间的一对一的聊天 沟通 2 发送和接受文件 发送和接受文件模块可以实现用户在一对一的私聊 模式下可以见自己手机 sd 卡中的文件很图片发送到对方的手机中 并且直接存 放在对方的手机 sd 卡的根目录下 3 多对多群聊 多对多群聊模块可以实现多个用户通过创建聊天组进行 群聊 福建船政交通职业学院毕业论文 6 2 1 3 数据流图 下面是设计的数据流图 图 2 1 顶层数据流图 图 2 2 一层数据流图 图 2 3 二层数据流图 图 2 1 顶层数据流图 图 2 2 一层数据流图 福建船政交通职业学院毕业论文 7 2 3 二层数据流图 2 2 关键技术 2 2 1开发技术 本设计是基于 android 平台的一个设计 android 是 google 开发的基于 linux 平台的开源智能手机操作系统 android 应用程序由一些零散的有联系的 组件组成 通过一个工程 manifest 绑定在一起 在 manifest 中 描述了每一 个组件以及组件的作用 android 应用程序概述一般来说 android 应用程序 主要由四部分组成 activity 活动对象 broadcast receiver 广播接收器 service 服务 contentprovider 内容提供者 然而 并不是所有的程序都 福建船政交通职业学院毕业论文 8 需要全部部分 可以由上面的一个或几个来组建 使用某些组件构建 android 应用程序时 需要在 androidmanifest xml 文件里进行声明 1 activities 活动 在 android 应用程序中 activity 一般代表手机的一屏 即用户可见的一 个界面 an droid 应用程序的运行过程就是在不同的 activity 之间切换的过 程 每个 activity 都有自己的视图和事件对应 2 大多数应用程序都有多个 activity 每一个画面对应于你的应用程序 将会是 activity 类的扩展 activity 使用 views 去构建 ui 来显示信息和响应用户的行为 就桌面开发而 言 一个 activity 相当于一张 form 2 services 服务 service 是具有长生命周期并且没有用户界面的代码 通过 start service intent service 可以来启动一个 service 通过 context bindservice 可以绑定一个 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 或者服务来执行你的行为意图 系统会决定那个 些 目标来 福建船政交通职业学院毕业论文 9 执行适当的行为 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 代码编写工具 eclipse eclipse 是一个开放源代码的 基于 java 的可扩展开发平台 就其本身而 言 它只是一个框架和一组服务 用于通过插件组件构建开发环境 eclipse 附带了一个标准的插件集 包括 java 开发工具 java development kit jdk eclipse 还包括插件开发环境 plug in development environment pde 这 个组件主要针对希望扩展 eclipse 的软件开发人员 因为它允许他们构建与 eclipse 环境无缝集成的工具 eclipse 是著名的跨平台的自由集成开发环境 ide 最初主要用来 java 语言开发 但是目前亦有人通过插件使其作为其他 计算机语言比如 c 和 python 的开发工具 eclipse 的本身只是一个框架平台 但是众多插件的支持使得 eclipse 拥有其他功能相对固定的 ide 软件很难具有 的灵活性 许多软件开发商以 eclipse 为框架开发自己的 ide 6 2 功能模拟工具 android 模拟器 android 模拟器能够模拟除了接听和拨打电话外的所有移动设备上的典型 功能和行为 android 模拟器提供了大量的导航和控制键 你可以通过鼠标或 福建船政交通职业学院毕业论文 10 键盘点击这些按键来为你的应用程序产生事件 同时它还有一个屏幕用于显示 android 自带应用程序和你自己的应用程序 为了便于模拟和测试应用程序 android 模拟器允许你的应用程序通过 android 平台服务调用其他程序 访问 网络 播放音频和视频 保存和传输数据 通知用户 渲染图像过渡和场景 android 模拟器同样具有强大的调试能力 例如能够记录内核输出的控制台 模拟程序中断 比如接受 短信或打入电话 模拟数据通道中的延时效果和遗失 2 2 3 运行环境 1 硬件环境 android 系统的智能手机 2 软件要求 手机系统 android android4 0 0 及其以上 福建船政交通职业学院毕业论文 11 3 系统总体设计 3 1 设计思想 蓝牙通信 类似于 tcp 通信 都需要有服务器端和客户端 在本聊天系统 中 一部 android 手机作为蓝牙服务器端 另外两台 android 手机作为蓝牙客 户端 客户端分别连到服务器 给服务器发送并接收文本消息 服务器也能够 给客户端发送并接收文本消息 前面已经提到 本系统主要用到的 android 系 统组件为 activity 和 service 在 android 的设计中 每个 activity 都是一 个独立的进程 每个 service 也是一个独立的进程 而 activity 要与 service 进行通信 就是跨进程的通信 这时就需要使用 binder 机制了 android 对 100 binder 机制进行了抽象 定义了 ibinder 接口 在上层 其具体实现是 由 aidl android interface definition language 即 android 接口描述语言 来完成的 本文在蓝牙通信服务器端和客户端都使用了 mvc 模式 采用分层的结构 具体分为表示层 控制层 数据交换层 对应 mvc 设计模式中的 view controller 和 model 软件总体架构如下图图 3 1 和图 3 2 所示 图 3 1 服务器结构 btserver startdiscoverablemode connection connectionservice 福建船政交通职业学院毕业论文 12 图 3 2 客户端结构 表示层向用户展示模型的状态 在本软件中是以每个 activity 的对应的 页面 对话框和 一些显示控件所展现 一般以 layout 文件夹下的布局文件承 载 主要用来输入和显示文本消息 打开蓝牙 可被查找 功能及搜索蓝牙设 备 控制层负责表示层和业务层的流程控制 一方面将表示层的调用发到业务 层请求处理 另一方面将业务层的处理结果反应到表示层进行界面上的显示 业务和数据交互层 封装了蓝牙数据传输的核心操作 如创建 socket 创建通 道 传输数据 处理输入输出流等 它可以通过控制层被调用 也可以在收到 连接请求或文本消息时把结果返回给控制层 进而返回到表示层 7 采用 mvc 设计模式 对整个代码进行了分层 使程序结构更加清晰 代码更加健壮 提 高了模块化程度 各模块职责明确 高效率的处理相应事件 btclient serverlistactive connection connectionservice 福建船政交通职业学院毕业论文 13 3 2 系统框架 3 2 1 系统总体框架 手机蓝牙通讯设计阶段的主要目的是将设计分析阶段所提出的反映了用户 信息需求的系统逻辑方案转换成可以实施的基于计算机与通信系统的物理 技 术 方案 具体要求对系统进行功能分解 不断下去 直到分解成含义明确 功能单一的单元功能模块 从而绘制出系统的功能模块图 即 hipo 图 此设计 的 hipo 图 3 2 如示 图 3 3 系统 hipo 图 用户扫描模块 好友查找主要在这一模块中 用户可以根据实际情况 将 用已近蓝牙配对的其他用户设置为聊天对象 并且提示用户选中的聊天对象是 否有在线 一对一私聊模块 该模块的主要功能是用户根据选择的聊天对象进行一对 一的单独聊天沟通 并且可以发送和接受文件或者图片 发送文件的时候点击 按钮时直接跳到用户的手机 sd 卡的根目录下 接受的文件也是自己存放在手机 的 sd 卡根目录下 多对多群聊模块 该模块的主要功能的主要功能是用户可以自己创建一个 聊天组 把扫描到的其他用户加到聊天组中进行多对多的群体聊天沟通 3 2 2 系统实现原理 手机蓝牙通讯 用 户 扫 描 一 对 一 私 聊 多 对 多 群 聊 手机蓝牙通讯 福建船政交通职业学院毕业论文 14 手机蓝牙通讯的设计跟利用的网络连接的设计有着许多不同的地方 网 络连接的聊天设计所考虑的因素 例如 需要对布局进入大量美化以及动画设 计等等 而即时通讯只要提供满足访客双方直接实时聊天即可 因此 在设计 聊天系统的过程中 必须要考虑好以下几个设计要点 在蓝牙上的聊天程序一般都是以服务端提供服务端连接响应 使用者通 过客户端程序连接服务端 就可以与在同一服务端上的用户交谈 这是一个面 向连接的通信过程 因此 程序要在 c s 框架下 实现服务器端和客户端两部 分程序 图 3 1 系统实现原理图 8 建立连接 开始通讯 结束通讯 图 3 1 系统实现原理图 3 3 各模块详细功能 3 3 1服务器端结构 蓝牙聊天系统服务器架构 在 btserver 里 有两个 listview 分别用来 client server 等待并接受 连接请求 建立服务 端 socket 接受请求后创 建连接 socket iutputstr eam outputst ream 关闭 sochet outputst ream 关闭 sochet iutputstr eam 创建连接 socket 向服务 端发送请求 福建船政交通职业学院毕业论文 15 显示从不同客户端接收到的文本消息 两个输入框 用来输入文本消息发给客 户端 这是程序的界面构成 启动程序后 到 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 服务器端结构 福建船政交通职业学院毕业论文 16 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 客户端结构 福建船政交通职业学院毕业论文 17 福建船政交通职业学院毕业论文 18 4 详细设计 上文中主要对整个系统的需求进行分析和数据库的设计进行介绍 紧接着 下文将通过说明并演示手机蓝牙通讯的操作流程以及截图来介绍手机蓝牙通讯 软件 并对一些关键性的代码进行注释解释 4 1 系统架构 src 里主要是系统的框架 src 里面存放的是 activity 程序 或者是以后 的其他组件 如图 4 1 所示 图 4 1 系统框架图 1 drawable mdpi 存放图片的文件夹 存放中分辨率的图片 如图 4 2 所 示 图 4 2 系统框架图 2 layout 存放所有的布局管理器的配置信息 如图 4 3 所示 福建船政交通职业学院毕业论文 19 图 4 3 系统框架图 3 4 2 蓝牙的设置及代码 4 2 1权限设置 对蓝牙的操作需要相应的权限 在 androidmanifest xml 文件里的如下两 行语句 4 2 2 获取蓝牙设备 代码执行到 bluetoothchat oncreate 函数 与蓝牙相关的代码如下 mbluetoothadapter bluetoothadapter getdefaultadapter mbluetoothadap ter 是一个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 福建船政交通职业学院毕业论文 20 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 用于监听未加密的连接请求 它们最大的区别在于 福建船政交通职业学院毕业论文 21 创建服务器套接字时 使用的函数不同 代码在 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 将执行到 福建船政交通职业学院毕业论文 22 bluetoothchat onoptionsitemselected 函数里的 ensurediscoverable 函数 public boolean onoptionsitemselected menuitem item intent serverintent null switch item getitemid case r id discoverable ensurediscoverable return true return false ensurediscoverable 函数的功能就是设置蓝牙设备能被客户端搜索到 其 代码如下 if mbluetoothadapter getscanmode bluetoothadapter scan mode connectable discoverable intent discoverableintent new intent bluetoothadapter action request discoverable discoverableintent putextra bluetoothadapter extra discoverable d uration 300 设置蓝牙 300 秒内可以被搜索到 startactivity discoverableintent startactivity 将弹出一个对话框 询问是否使设备可见 请单击 确定 按钮 完成蓝牙设置 4 2 6 获得已经配对的蓝牙设备 代码在 devicelistactivity oncreate 函数里 只有两行 mbtadapter bluetoothadapter getdefaultadapter set paireddevices 福建船政交通职业学院毕业论文 23 mbtadapter getbondeddevices 4 3 服务端的连接和数据的收发 4 3 1连接服务器 在客户端手机的 devicelistactivity 界面上 完成搜索后将列出周围的蓝 牙设备 用户单击某个设备 将连接该设备 用户单击devicelistactivity界面上的蓝牙设备列表 将调用 devicelistactivity mdeviceclicklistener 的 onitemclick函数 关键代码 如下 string info textview v gettext tostring string address info substring info length 17 intent intent new intent intent putextra extra device address address setresult activity result ok intent finish 上述代码中intent putextra保存了服务器地址 finish将销毁本界面 系 统将依次调用函数 bluetoothchat onactivityresult bluetoothchat connectdevice mchatservice connect device secure bluetoothchatservice connect connect函数将创建连接线程 connectthread线程 该线程的重点在于 1 由createrfcommsockettoservicerecord或 createinsecurerfcommsockettoservicerecord创建套接字 需要指定蓝牙服务 器的服务uuid 2 mmsocket connect 完成连接 3 connected mmsocket mmdevice 创建读取数据的线程 connectedthread 至此 服务器与客户端的蓝牙数据连接完成了 可以聊天了 4 3 2数据的收发 用户程序主界面的文本框内输入文本 单击 send 按钮 将依次调用 bluetoothchat sendmessage mchatservice write connectedthread writ e connectedthread write 的代码如下 mmoutstream write buffer mhandler obtainmessage bluetoothchat message write 1 1 buffer sendtotarget 第一行是发送数据给对方 第二行是给 mhandler 发送消息 这个 mhandler 是 bluetoothchatservice mhandler 在 bluetoothchatservice 构造 福建船政交通职业学院毕业论文 24 时 mhandler 被指定为第二个参数 其实就是 bluetoothchat mhandler bluetoothchat mhandler 在处理 message write 消 息时 将更新界面显示 服务器或客户端都有一个 connectedthread 线程 一旦有数据进来 就会 调用 mhandler obtainmessage bluetoothchat message read bytes 1 buffer sendtotarget 即给 mhandler 发送 message read 消息 bluetoothchat mhandler 在处理此消息时 将更新界面显示 4 3 3文件的接受和发送 bluetoothdevice device madapter getremotedevice strremoteaddress ifif device nullnull log d tag can not get the remote device toast maketext mcontext can not get the remote device 1000 show sendlog can not get the remote device returnreturn trytry method m device getclass getmethod createrfcommsocket newnew class intint classclass ifif m nullnull socket device createrfcommsockettoservicerecord my uuid secure elseelse socket bluetoothsocket m invoke device integer valueof 29 catchcatch exception ex sendlog failed to create socket ex getmessage ifif socket nullnull log d tag can not cteate the connection to remote device toast maketext mcontext can not cteate the connection to remote device 1000 show 福建船政交通职业学院毕业论文 25 sendlog can not cteate the connection to remote device returnreturn sendlog 正在准备发送文件 madapter canceldiscovery socket connect sendlog 文件正在发送中 请耐心等待 intint contentlength 0 dataoutputstream out newnew dataoutputstream socket getoutputstream bytebyte fnbuf strfilename getbytes contentlength fnbuf length 发送文件名称包 msgtype file name out writebyte msgtype out writeint contentlength ifif contentlength 0 out write fnbuf 暂停50秒 thread sleep 50 0

温馨提示

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

评论

0/150

提交评论