基于Android平台的即时通讯系统的研究与设计_毕业设计.doc_第1页
基于Android平台的即时通讯系统的研究与设计_毕业设计.doc_第2页
基于Android平台的即时通讯系统的研究与设计_毕业设计.doc_第3页
基于Android平台的即时通讯系统的研究与设计_毕业设计.doc_第4页
基于Android平台的即时通讯系统的研究与设计_毕业设计.doc_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

本科毕业设计(论文) 基于基于 android 平台的平台的 即时通讯系统的研究与设计即时通讯系统的研究与设计 学 院 自动化学院 专 业 网络工程 (网络与信息化方向) 年级班别 2009 级(2)班 学 号 3109001332 学生姓名 张京 指导教师 郑日荣 2013 年 5 月 基基 于于 a a n n d d r r o o i i d d 平平 台台 的的 即即 时时 通通 讯讯 系系 统统 的的 研研 究究 与与 设设 计计 张张 京京 自自 动动 化化 学学 院院 i 摘摘 要要 随着 android 系统的发展,越来越多的移动设备开始使用 android 作为操作系 统。android 系统内核基于 linux 而来,应用层则使用基于 java 代码的 dalvik 虚拟 机,因此 android 代码的主要编程语言是 java。 即时通讯(instant messenger,简称 im) ,指基于互联网的即时交流信息的业务。 即时通讯是当今互联网用户主要通讯方式之一,能够为互联网用户带来直观、便捷 的信息交换服务。蓝牙,一种支持设备短距离通信的无线电技术,能在包括移动电话、 pda、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换。 本文主要对 android 系统、蓝牙协议进行研究,通过分析 android 的一个蓝牙即 时通讯实例,达到基于 android 即时通讯系统的研究目的。在这些研究的基础上, 设计出能够实现 android 系统上基于蓝牙、能够进行文件发送的即时通讯软件。 首先,本文分析 android 系统的框架以及功能特征,讲述了 android 系统的基本 运作方式。其次,讲述了在 android 系统上如何使用蓝牙协议,研究了 android 系 统上的蓝牙工作方式以及关键代码。最后,分析蓝牙的工作实例,在此基础上在 eclipse 开发出能够实现即时通讯的 android 实例,并且能够传送文件。 关键词:即时通讯; 蓝牙; android ii abstract with the development of the android system, more and more mobile devices start using android as the operating system. android system is based on the linux kernel and the application layer is using java-based code dalvik virtual machine, therefore, the major programming language of android system is java. instant messenger (abbreviated im), refers to internet-based real-time information exchange service. im is the main way to communicate of internet users; one can provide internet users with an intuitive and convenient information exchange service. bluetooth, one that supports short-range communication device radio technology, can include mobile phone, pda, wireless headsets, laptop computers, related peripherals and other wireless information exchange between devices. this paper mainly research on the android system and the bluetooth protocol, by analyzing of a bluetooth android im instance, to achieve the purpose of researching android-based instant messaging system. design an android system based on bluetooth, with the capable of instant messaging and file sending. firstly, this paper analyzes framework and functional characteristics of android system, and tells the basic operation of android system. secondly, using bluetooth protocol on the android system and tells some key-codes. finally, design an im program through eclipse based on the analysis of bluetooth working examples which have the ability to transfer files. keywords: instant messaging; bluetooth; android iii 目目 录录 摘 要 i abstractii 1 绪论1 1.1 关于 android 系统的背景以及研究目的 1 1.2 国内外研究状况.1 1.3 通过 google android sdk 以及 eclipse 进行开发.2 1.4 本论文研究的目的及意义.3 1.5 本论文主要结构.3 2 android系统的研究与设计5 2.1 android 系统的功能特征 .5 2.2 android 系统的编程环境的搭建 .6 2.3 android 系统的架构 .7 2.3.1 android 操作系统7 2.3.2 android 应用程序9 2.4 android 程序开发 .10 2.4.1 android 用户界面(ui)10 2.4.2 android 控制层开发.11 2.4.3 android 任务和进程/线程模型.13 2.4.4 android 持久层开发.14 2.5 bluetooth14 2.5.1 bluetooth 简介.14 2.5.2 bluetooth 有关基本概念16 2.5.3 如何在 android 系统中操作 bluetooth22 3 程序主要架构与模块26 3.1 需求分析.26 3.1.1 引言26 3.1.2 系统功能26 3.1.3 设计分析27 3.1.4 运行环境说明28 3.2 程序主要架构以及流程29 3.2.1 bluetoothchat 例程分析.29 3.2.2 bluetooth 模块31 3.2.3 文件读取以及存储模块.38 4 程序的调试与结果.41 4.1 虚拟机的搭建以及使用41 4.2 adb 调试 44 iv 4.3 debug 调试.45 4.4 运行结果.46 总 结49 参考文献51 致 谢52 1 1 1 绪论绪论 1.1 关于关于 android 系统的背景以及研究目的系统的背景以及研究目的 android 一词的本义指“机器人” ,同时也是 google 于 2007 年 11 月 5 日宣布的 基于 linux 平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界 面和应用软件组成。 android 一词最早出现于法国作家利尔亚当(auguste villiers de lisle-adam)在 1886 年发表的科幻小说未来夏娃 (lve future)中。他将外表像人的机器起名 为 android2。 蓝牙协议 bluetooth。蓝牙是一种短距离的无线通信技术,它最初提出的是用来 取代电缆连线,也可以用于各种移动设备的互联,组建个人无线局域网4,蓝牙无线 通信技术的主要特点5有:低成本、低功率;短标称的蓝牙无线通信距离,以节省 电池能量;永外加的功率放大器扩展的无线通信距离;在全球可用并且无限制的 2.4ghz ism(工业、科学、医疗)频段内。 随着,人们对于即时通讯的需求越来越多样化,产生了各种各样不同用途的协 议。即时通讯(instant messenger,简称 im) ,是指能够即时发送和接收互联网消息 等的业务。自 1998 年面世以来,特别是近几年的迅速发展,即时通讯的功能日益丰 富,逐渐集成了电子邮件、博客、音乐、电视、游戏和搜索等多种功能。即时通讯 不再是一个单纯的聊天工具,它已经发展成集交流、资讯、娱乐、搜索、电子商务、 办公协作和企业客户服务等为一体的综合化信息平台。是一种终端连往即时通讯网 络的服务。即时通讯不同于 e-mail 在于它的交谈是即时的。大部分的即时通讯服务 提供了状态信息的特性显示联络人名单,联络人是否在在线与能否与联络人交 谈3。 在这样的背景之下,发展 android 系统上的即时通讯软件已经成为一个非常主 流性的问题,如何实现,以及如何提供更加优质的服务将会是 android 开发的一个 非常重要的问题。 1.2 国内外研究状况国内外研究状况 目前 android 最新的版本是 4.2 jellybean, 中文名是“果冻豆” ,该系统是 2 android 4.0.x ice cream sandwich “(冰激凌三明治)“ 的升级版, android 5.0 的代号将 是“key lime pie(酸橙派)“。在今年的 2013 google i/o 大会上,从 google play 到 map、game api,再到 android studio 开发工具,android 在移动端的全面系统升级, 这也让 android 之前和 ios 相对较弱的部分全面追上。 android 发行的版本:android 在正式发行之前,最开始拥有两个内部测试版本, 并且以著名的机器人名称来对其进行命名,它们分别是:阿童木(androidbeta) , 发条机器人(android 1.0) 。后来由于涉及到版权问题,谷歌将其命名规则变更为用 甜点作为它们系统版本的代号的命名方法。甜点命名法开始于 android 1.5 发布的时 候。作为每个版本代表的甜点的尺寸越变越大,然后按照 26 个字母数序: 阿童木(androidbeta) 发条机器人(android 1.0),2008 年 9 月发布。 纸杯蛋糕(android 1.5)cupcake,2009 年 4 月 30 日发布。 甜甜圈(android 1.6)donut,2009 年 9 月 15 日发布。 松饼(android 2.0/2.1)clair,2009 年 10 月 26 日发布。 冻酸奶(android 2.2)froyo,2010 年 5 月 20 日发布。 姜饼(android 2.3)gingerbread,2010 年 12 月 7 日发布。 蜂巢(android 3.0)honeycomb,2011 年 2 月 2 日发布。 冰激凌三明治(android 4.0)ice cream sandwich,2011 年 10 月 19 日在香港发 布。 果冻豆(jelly bean,android4.1 和 android 4.2)jelly bean,2012 年 6 月 28 日 发布,android 4.2 jelly bean:2012 年 10 月 30 日发布。 对于基于 android 系统的即时通讯软件,国内比较著名的软件有 qq(android 版) 、微信。国外比较著名的有 msn、line me 等等。 1.3 通过通过 google android sdk 以及以及 eclipse 进行开发进行开发 早期的 android 应用程序开发中,通常通过在 android sdk(android 软件开发 包)中使用 java 作为编程语言来开发应用程序。开发者亦可以通过在 android ndk(android native 开发包)中使用 c 语言或者 c+语言来作为编程语言开发应 用程序。同时 google 还推出了适合初学者编程使用的 simple 语言,该语言类似微 软公司的 visual basic 语言。此外,google 还推出了 google app inventor 开发工具, 3 该开发工具可以快速地构建应用程序,方便新手开发者。 eclipse 是一个开放源代码的、基于 java 的可扩展开发平台。就其本身而言, 它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,eclipse 附带了一个标准的插件集,包括 java 开发工具(java development kit,jdk) 。 eclipse 的插件机制是轻型软件组件化架构。在客户机平台上,eclipse 使用插件来提 供所有的附加功能,例如支持 java 以外的其他语 言。 已有的分离的插件已经能够 支持 c/c+(cdt) 、perl、ruby,python、telnet 和数据库开发。插件架构能够支持 将任意的扩展加入到 现有环境中,例如配置管理,而决不仅仅限于支持各种编程语 言6。 1.4 本论文研究的目的及意义本论文研究的目的及意义 早期的即时通讯是属于 unix 用户的专利,随着个人电脑与互联网的普及,即时 通讯成为人与人沟通的另一条管道。 即时通讯在 2003 年后与万维网、电子邮件共同成为互联网使用的主流。 2007 年之后,由于智能手机普遍流行起来。传统上电信运营商所建构 sms、mms 信息服务系统,逐渐被以网络架构的第三方服务商所瓜分移动设备的加 值营收。 而对于 android 系统,这方面的发展有 5 年,相比起其他平台的发展已经短了 很多,而对于这种新兴的移动设备系统,有更加多的信息可以利用,例如 gps 信息、 照片信息,手机联系人信息等等。这些开发能够使移动设备之间的通讯更加人性化、 更加便利,有利于提高通讯效率。 即时通讯除了能加强网络之间的信息沟通外,最主要的是可以将网站信息与聊 天用户直接联紧在一起。通过网站信息向聊天用户群及时群发送,可以迅速吸引聊 天用户群对网站的关注,从而加强网站的访问率与回头率; 即时通信利用的是互联网线路,通过文字、语音、视频、文件的信息交流与互 动,有效节省了沟通双方的时间与经济成本; 即时通信系统不但成为人们的沟通工具,还成为了人们利用其进行电子商务、 工作、学习等交流的平台。 1.5 本论文主要结构本论文主要结构 4 本文章主要分为 5 个部分:绪论、android 系统的研究与设计、程序主要架构与 模块、程序的调试、程序运行结果。 1、绪论 本章主要介绍 android 系统、bluetooth 的背景以及开发现状,以及本系统的设 计意义。 2、android 系统的研究与设计 本章主要介绍 android 系统的框架与特征,介绍 android 系统的运作方式与特 征函数,以及蓝牙的术语定义以及 android 中如何运用蓝牙。 3、程序主要架构与模块 本章主要介绍程序的需求分析,介绍系统的逻辑运行流程,介绍实例关键代码。 4、程序的调试以及运行结果 本章主要介绍 eclipse 中如何调试及其过程,以及程序的运行结果。 5 2 2 androidandroid 系统的研究与设计系统的研究与设计 2.1 android 系统的功能特征系统的功能特征 1、应用程序架构:在应用程序架构内已经具备多种不同的基础组件,在开发应 用程序时,就可以直接调用这些组件来使用,可以节省开发应用程序的心力及时间。 2、dalvik 虚拟机器:在 android 平台上所使用 java 虚拟机,不是 sim 公司的标 准 java 虚拟机,而是使用 google 自主开发的代号为 dalvik 的虚拟机,它在保证 api 方面的兼容的同时,针对移动手机进行了大幅优化,占用资源更小,运行效率 更高。 3、集成的浏览器:集成的浏览器是 android 内建的浏览器,是以 webkit 的浏览 引擎为基础所开发成的。wedkit 是一个开源浏览器网页排版引擎,目前使用 webkit 引擎的浏览器主要有:safari,midori,epiphany 等。配合 android 手机的功 能,可以在浏览网页时,达到更好的效果,例如:局部性的缩放网页上的资讯、触控 式的操作等效果。 4、优化的绘图能力:在程序里可以用到的绘图功能分为 2d 与 3d 两个方面。在 2d 方面,android 提供了一套特有的类库,而在 3d 方面则是使用 opengl es1.0(opengl for embedded systems)规范的类库。它们是一种非常快的图形引擎, 并且支持硬件加速。 5、sqlite 数据库:sqlite 提供结构化的数据存取。sqlite 是一款轻型的数据库, 它的设计目标是嵌入式的,目前已经在很多嵌入式产品中使用了它,它占用的资源 非常低。它能够支持 windows/linux/unix 等主流的操作系统,同时能够跟很多程序 语言相结合,比如 php,java 等,还有 odbc 接口,同样比起 mysql,postgresql 来讲,它的处理速度比它们都快。它无需安装和管理配置,它是一个储存在单一磁 盘文件中的完整数据库,体积小只有 250kb 但支持数据库大小至 2tb。它虽然很小 巧,但是支持的 sql 语句毫不逊色于其它开源数据库。同时它还支持事务功能和并 发处理等等。sqlite 也是一套开放性的关联式资料库,其特点在于轻量性方面的设 计结构,更适合在手机上使用。 6、多媒体的支持能力:主要用于播放媒体文件。这同时包括对音频(如播放 mp3 6 或其他音乐文件等)和视频(如播放从网上下载的视频)的支持,并支持“播放 uri 地 址”(note:uri 即是统一资源识别地址)模式在网络上直接播放的流媒体。另外支 持各种通用的静态图像格式,如 jpg、png、gif 等格式。 7、gsm 技术:global system for mobile communications,即全球移动通讯系统, 俗称“全球通” ,是一种起源于欧洲的移动通信技术标准,是第二代移动通信技术, 其开发目的是让全球各地可以共同使用一个移动电话网络标准,让用户使用一部手 机就能行遍全球。gsm 技术是属于手机硬件方面的展现,也是在开发 android 应用 程序时可以突出的特点之一。 8、蓝牙:蓝牙是一种新型、开放、低成本、短距离的无线连接技术,可取代短 距离的电缆,实现话音和数据的无线传输。edge(enhanced data rate for gsm evolution),即增强型数据速率 gsm 演进技术。edge 是一种从 gsm 到 3g 的过渡 技术,它主要是在 gsm 系统中采用了一种新的调制方法,即最先进的多时隙操作 和 spsk 调制技术。由于 8psk 可将现有 gsm 网络采用的 gmsk 调制技术的信号 空间从 2 扩展到 8,从而使每个符号所包含的信息是原来的 4 倍。wi-fi(wireless fidelity),即无线保真技术,与蓝牙技术一样,同属于在办公室和家庭中使用的短距 离无线技术。该技术使用的是 2.4ghz 附近的频段,该频段目前尚属没用许可的无 线频段。其目前可使用的标准有两个,分别是 ieee802.lla 和 ieee802.11b。这些通 讯能力也是属于手机硬件方面的展现,也是在开发 android 应用程序时可以突出的 特点之一。 9、gps: global positioning system,即全球定位系统,它是一个由覆盖全球的 24 颗卫星组成的卫星系统。这个系统可以保证在任意时刻和任何地点都可以同时观 测到 4 颗卫星,以保证卫星可以采集到该观测点的经纬度和高度,以便实现导航、 定位、授时等功能。这项技术可以用来引导飞机、船舶、车辆以及个人。同样也是 属于手机硬体方面的体现,也是在开发 android 应用程序是可以突出的特点之一。 2.2 android 系统的编程环境的搭建系统的编程环境的搭建 所需开发环境:jdk 5 或者 jdk 6 (仅有 jre 不够) 、eclipse 3.5 (galileo)。 下载用于在 eclipse 开发 android 应用的 adt 插件,在企业开发中,很多程序 员使用 eclipse ide 作为应用的开发环境。为了使得 android 应用的创建,运行和调 试更加方便快捷。android 的开发团队专门针对 eclipse ide 定制了一个插件: 7 android development tools(adt) 安装 eclipse 插件 (adt),启动 eclipse,选择 help install new software, 在出现的对话框里,点击 add 按钮,在对话框的 name 一栏输入“adt” , 然后点 击 archive.,浏览和选择已经下载的 adt 插件压缩文件。点击 ok.。返回可用软 件的视图,会看到这个插件,然后选择 developer tools (会选中下面的“android developer tools”和 “android editors”),点击 next,最后重启 eclipse。 下载安装 android sdk:android sdk 包含了开发 android 应用所依赖的 jar 文 件、运行环境及相关工具。下载完 sdk 后,把.zip 文件解压到电脑上合适位置。启 动 eclipse,选择 window-preferences,在打开的视图左边点击 android,在右边的 sdk location 中选择 android sdk 所在位置。 在用户变量中新建 path 值为:android sdk 中的 tools 绝对路径(本机为 d:androiddevelopandroid-sdk-windows ools)。 新建一个新的项目7:通过 file - new - project 菜单,建立新项目 “android project“然后填写必要的参数, (注意这里我勾选的是 google apis,可以选 喜欢的,但要创建相应的 avd),相关参数的说明: project name: 包含这个项目的文件夹的名称。 package name: 包名,遵循 java 规范,用包名来区分不同的类是很重要的,我用 的是 helloworld.test。 activity name: 这是项目的主类名,这个类将会是 android 的 activity 类的子类。一个 activity 类是一个简单的启动程序和控制程序的类。它可以 根据需要创建界面,但不是必须的。 application name: 一个易读的标题在的应用 程序上。 在“选择栏“的 “use default location“ 选项,允许选择一个已存在的项目。 点击 finish 后,点击 eclipse 的 run 菜单选择 run configurations 选择“android application” ,点击在左上角(按钮像一张纸上有个“+”号)或者双击 “android application” , 有个新的选项“new_configuration”(可以改为我们喜欢的 名字)。 在右侧 android 面板中点击 browse,选择 helloworld 2.3 android 系统的架构系统的架构 2.3.1 android 操作系统 8 第一层:linux 操作系统和驱动(linux kernel):由 c 语言实现。android 核心系统 服务依赖于 linux2.6 内核,包括:安全性、内存管理、进程管理、网络协议、驱动 模型。linux 内核也作为硬件和软件栈之间的抽象层。除了标准的 linux 内核外, android 还增加了内核的驱动程序:binder(ipc)驱动、显示驱动、输入设备驱动、音 频系统驱动、摄像头驱动、wifi 驱动、蓝牙驱动、电源管理。 第二层:本地框架和 java 运行环境(libraries 和 android runtime)本地 框架是有 c/c+实现。包含 c/c+库,被 android 系统中不同组件使用,它们通过 android 应用程序框架为开发者进行服务。系统 c 库:(libc)从 bsd 继承过来的标准 的 c 系统函数库,专门是为基于嵌入式 linux 的设备定制的库。多媒体库:基于 packervideo 的 opencore;该库支持多种常用的音频、视频格式回放和录制,支持 多种媒体格式的编和解码格式。suface manager:显示子系统管理器,并且为多个应 用程序提供 2d 和 3d 图层的无缝融合。libwebcore:一个最新的 web 浏览器引擎, 支持 android 浏览器,以及一个可嵌入式的 web 视图。sgl:skia 图形库,底层的 2d 图形引擎。 3d libraries:基于 opengl es1.0 api 的实现;该库可以使用硬件 3d 加速(如 果可用) ,或者使用高度优化的 3d 软加速。freetype:位图(bitmap)和矢量(vector) 字体显示。 android 运行环境(android runtime):提供了 java 编程语言核心库的大多数 功能,由 dalvik java 虚拟机和基础的 java 类库组成。dalvik 是 android 中使用的 java 虚拟机,每个 android 应用程序都在自己的进程中运行,都拥有一个独立的 dalvik 虚拟机实例。dalvik 被设计成一个可以同时高效运行多个虚拟机实例的虚拟系统。 执行后缀名为.dex 的 dalvik 可执行文件,该格式的文件针对小内存使用做出了优化。 同时虚拟机是基于寄存器的,所有的类都是有 java 编译器编译,然后通过 sdk 中 的“dx”工具转化为.dex 格式由虚拟机执行。dalvik 虚拟机依赖于 linux 内核的一 些功能,比如线程机制和底层内存管理机制。 第三层:android 应用框架(android framework): 在 android 系统中,开 发人员也可以完全访问核心应用程序所使用的 api 框架。包含的框架入上图(不在 陈述) 第四层:android 应用程序(applications) android 应用程序都是有 java 语言 9 编写的。用户开发的 android 应用程序和 android 的核心应用程序是同一层次的, 它们都是基于 android 的系统 api 构建的。 图 2.1 android 系统架构图 2.3.2 android 应用程序 src/ java 原代码存放目录 gen/ 自动生成目录 gen 目录中存放所有由 android 开发工具自动生成的文件。目录中最重要的就 是 r.java 文件。 这个文件由 android 开发工具自动产生的。android 开发工具会自 动根据 res 目录的 xml 界面文件、图标与常量,同步更新修改 r.java 文件。因为 r.java 文件是由开发工具自动生成的,应避免手工修改 r.java。r.java 在应用中起到 了字典的作用,它包含了界面、图标、常量等各种资源的 id,通过 r.java,应用可 以很方便地找到对应资源。另外编绎器也会检查 r.java 列表中的资源是否被使用到, 没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。8 res/ 资源(resource)目录: 在这个目录中可以存放应用使用到的各种资源,如 xml 界面文件,图片或数据。 10 具体请看 ppt 下方备注栏。 assets 资源目录: android 除了提供/res 目录存放资源文件外,在/assets 目录也可以存放资源文件, 而且/assets 目录下的资源文件不会在 r.java 自动生成 id,所以读取/assets 目录下的 文件必须指定文件的路径,如:file:/android_asset/xxx.3gp androidmanifest.xml 项目清单文件: 这个文件列出了应用程序所提供的功能,以后开发好的各种组件需要在该文件 中进行配置,如果应用使用到了系统内置的应用(如电话服务、互联网服务、短信服 务、gps 服务等等),还需在该文件中声明使用权限。 perties 项目环境信息,一般是不需要修改此文件。 2.4 android 程序开发程序开发 2.4.1 android 用户界面(ui) 对于一个 android 手机应用来说,一个好看有简介的界面,是相当重要的。技 能提高使用者的体验,又能保证应用的搞笑执行。android sdk 已经为用户提供了 一套完善的界面设计功能,有丰富的组件供我们使用,如果还不能满足我们的界面 需求,还可以对它们进行扩展。为了达到这样的目标,就要对 android sdk 中提供 的界面生成技术进行全面深入的学习,做到应用自如。android 实现用户界面的基本 知识,包括构建屏幕的基本组件,怎样使用 xml 定义屏幕并把它加载到代码中、 以及需要为用户界面处理的各种任务。9 我们写任何一段程序,都是需要有 ui 的,因为程序最终是给用户去用的,即使 写了一个工具,没有任何显示输入、输出,也还是需要暴露不要的方法来提供别人 使用,在此情景下,这些方法似乎也可以看作是 ui。对于 android 开发来说,用户 界面的视线是比较重要的和复杂的一环,如果有 html 设计经验,或者说有 swing、flash 等图形设计经验,那么理解 android 的 ui 设计会容易得多,甚至会有 似曾相识的感觉。 11 图 2.2 用户界面的树形结构 对于一个 android 应用来说,android.app.activity 类实例是一个最基本的功能单 元。一个 activity 实例可以做很多事情,但它本身无法显示在屏幕上,而是借助于 视图组(viewgroup)和视图(view),这两个才是 android 平台上最基本的用户界面表 达单元。 2.4.2 android 控制层开发 android 控制层包括:activity、intent startactivityforresult(enabler,recode); /同 startactivity(enabler); getaddress()获取本地蓝牙地址 getdefaultadapter()获取默认 bluetoothadapter,实际上,也只有这一种方法获取 bluetoothadapter getname()获取本地蓝牙名称 getremotedevice(string address)根据蓝牙地址获取远程蓝牙设备 getstate()获取本地蓝牙适配器当前状态(感觉可能调试的时候更需要) isdiscovering()判断当前是否正在查找设备,是则返回 true isenabled()判断蓝牙是否打开,已打开返回 true,否则返回 false listenusingrfcommwithservicerecord(string name,uuid uuid)根据名称,uuid 创建并返回 bluetoothserversocket,这是创建 bluetoothsocket 服务器端的第一步 startdiscovery()开始搜索,这是搜索的第一步 2、bluetoothdevice 描述了一个蓝牙设备 createrfcommsockettoservicerecord(uuiduuid)根据 uuid 创建并返回一个 bluetoothsocket,这个方法也是我们获取 bluetoothdevice 的目的创建 bluetoothsocket 这个类其他的方法,如 getaddress()、getname()等,同 bluetoothadapter。 3、bluetoothserversocket 如果去除了 bluetooth 相信大家一定再熟悉不过了,既然是 socket,方法就应该 都差不多,这个类一种只有三个方法: 两个重载的 accept(),accept(int timeout) 25 两者的区别在于后面的方法指定了过时时间,需要注意的是,执行这两个方法的时 候,直到接收到了客户端的请求(或是过期之后) ,都会阻塞线程,应该放在新线程 里运行。还有一点需要注意的是,这两个方法都返回一个 bluetoothsocket,最后的 连接也是服务器端与客户端的两个 bluetoothsocket 的连接 close() 关闭 4、bluetoothsocket 是客户端,跟 bluetoothserversocket 相对 一共 5 个方法,不出意外,都会用到 close() 关闭 connect() 连接 getinptustream() 获取输入流 getoutputstream() 获取输出流 getremotedevice() 获取远程设备,这里指的是获取 bluetoothsocket 指定连接的 那个远程蓝牙设备 26 3 3 程序主要架构与模块程序主要架构与模块 3.1 需求分析需求分析 3.1.1 引言 1、编写目的 这份软件为 android 系统提供基于蓝牙协议的即时通讯功能,使两个具备蓝牙 模块的 android 设备之间能够进行简单的字符串以及文件的相互发送的功能。 2、背景 软件系统名称:蓝牙聊天 任务来源:毕业设计,开发者:张京,用户实现软件的平台:android 系统、蓝 牙模块。 3、术语定义 此略(见本文 2 章) 3.1.2 系统功能 1、系统功能模块图 图 3.1 系统功能模块图 2、功能描述 (1)蓝牙模块 蓝牙模块是这个系统最主要的模块,主要负责两台设备之间的互相搜索,在搜 27 索之后建立连接,并且在需要数据发送的时候提供信息发送方式。设备之间所有的 数据交流都要经过这一个模块,这一个模块主要分为两个部分,一个是搜寻其他设 备,另外一个是建立这两个设备之间的连接。 (2)文件存储模块 文件存储模块主要负责文件的读取、写入功能,为程序的文件发送功能作服务 层,此模块有两个主要功能:保存文件和读取文件。 (3)发送 发送为此程序的主要 ui 层,用户在这个界面上输入文字,按下发送按钮,就可 以实现整个程序的功能。 3.1.3 设计分析 1、用户界面设计 图 3.2 用户界面设计图 2、系统流程图 28 图 3.3 系统运行流程图 3.1.4 运行环境说明 本程序运行于 android 系统,最低系统 android 1.5 cupcake,设备需要有蓝牙 模块。 29 3.2 程序主要架构以及流程程序主要架构以及流程 3.2.1 bluetoothchat 例程分析 google 提供的关于 bluetooth 开发的例程为 bluetoothchat。除去配置及 ui 定 义等文件,主程序文件共三个:bluetoothchat.java 、 bluetoothchatservice.java 以 及 devicelistactivity.java ,详细功能可见下面的描述。 图 3.4 bluetoothchat 流程图 1.bluetoothchat.java 此为例程的主 activity。oncreate() 得到本地 bluetoothadapter 设备,检查是否 支持。 onstart() 中检查是否启用蓝牙,并请求启用,然后执行 setupchat()。 setupchat() 中先对界面中的控件进行初始化增加点击监听器等,然创建 bluetoothchatservice 对象,该对象在整个应用过程中存在,并执行蓝牙连接建立、 消息发送接受等实际的行为。 2.bluetoothchatservice.java public synchronized void start() : 30 开启 macceptthread 线程,由于样例程序是仅 2 人的聊天过程,故之前先检 测 mconnectthread 和 mconnectedthread 是否运行,运行则先退出这些线程。 public synchronized void connect(bluetoothdevice device) : 取消 connecting 和 connected 状态下的相关线程,然后运行新的 mconnectthread 线程。 public synchronized void connected(bluetoothsocket socket, bluetoothdevice device) : 开启一个 connectedthread 来管理对应的当前连接。之前先取消任意现存的 mconnectthread 、 mconnectedthread 、 macceptthread 线程,然后开启新 mconnectedthread ,传入当前刚刚接受的 socket 连接。最后通过 handler 来 通知 ui 连接 ok 。 public synchronized void stop() :停止所有相关线程,设当前状态为 none 。 public void write(byte out) :在 state_connected 状态下,调用 mconnectedthread 里的 write 方法,写入 byte 。 private void connectionfailed() :连接失败的时候处理,通知 ui ,并设为 state_listen 状态。 private void connectionlost() :当连接失去的时候,设为 state_listen 状态 并通知 ui 。 内部类: private class acceptthread extends thread :创建监听线程,准备接受新连接。 使用阻塞方式,调用 bluetoothserversocket.accept() 。提供 cancel 方法关闭 socket 。 private class connectthread extends thread :这是定义的连接线程,专门用来对外发 出连接对方蓝牙的请求和处理流程。构造函数里通过 bluetoothdevice.createrfcommsockettoservicerecord(),从待连接的 device 产生 bluetoothsocket. 然后在 run 方法中 connect ,成功后调用 bluetoothchatsevice 的 connected() 方法。定义 cancel() 在关闭线程时能够关闭相关 socket 。 private class connectedthread extends thread :这个是双方蓝牙连接后一直运行 的线程。构造函数中设置输入输出流。 run 方法中使用阻塞模式的 31 inputstream.read() 循环读取输入流, 然后 post 到 ui 线程中更新聊天消息。也提 供了 write() 将聊天消息写入输出流传输至对方,传输成功后回写入 ui 线程。最 后 cancel() 关闭连接的 socket 。 3.devicelistactivity.java 该类包含 ui 和操作的 activity 类,作用是得到系统默认蓝牙设备的已配对设 备列表,以及搜索出的未配对的新设备的列表。然后提供点击后发出连接设备请求 的功能。 bluetoothdevice 类,此为对应的远程蓝牙 device createrfcommsockettoservicerecord() :创建该 device 的 socket 。 bluetoothsocket 类 connect() :请求连接蓝牙。 getinputstream() :得到输入流,用于接收远程方信息。 getoutputstream() :得到输出流,发送给远程方的信息。 close() :关闭蓝牙连接。 inputstream 类: read(byte) :以阻塞方式读取输入流。 outputstream 类: write(byte) :将信息写入该输出流,发送给远程。 3.2.2 bluetooth 模块 1.启动蓝牙功能: 首先通过调用静态方法 getdefaultadapter()获取蓝牙适配器 bluetoothadapter,以 后就可以使用该对象了。如果返回为空,则无法继续执行了。例如: bluetoothadapter mbluetoothadapter = bluetoothadapter.getdefaultadapter(); if (mbluetoothadapter = null) / device does not support bluetooth 其次,调用 isenabled()来查询当前蓝牙设备的状态,如果返回为 false,则表示 蓝牙设备没有开启,接下来需要封装一个 action_request_enable 请求到 intent 里面,调用 startactivityforresult()方法使能蓝牙设备,例如: if (!mbluetoothadapter.isenabled() 32 intent enablebtintent = new intent(bluetoothadapter.action_request_enable); startactivityforresult(enablebtintent, request_enable_bt); 2. 查找设备: 使用 bluetoothadapter 类里的方法,可以查找远端设备(大概十米以内)或者 查询在手机上已经匹配(或者说绑定)的其他手机了。当然需要确定对方蓝牙设备 已经开启或者已经开启了“被发现使能”功能(对方设备是可以被发现的是能够发 起连接的前提条件) 。如果该设备是可以被发现的,会反馈回来一些对方的设备信息, 比如名字、mac 地址等,利用这些信息,设备就可以选择去向对方初始化一个连接。 如果是第一次与该设备连接,那么

温馨提示

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

最新文档

评论

0/150

提交评论