Android平台下的邮箱客户端的设计与实现DOC.docx
- 文档编号:12939362
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:41
- 大小:774.30KB
Android平台下的邮箱客户端的设计与实现DOC.docx
《Android平台下的邮箱客户端的设计与实现DOC.docx》由会员分享,可在线阅读,更多相关《Android平台下的邮箱客户端的设计与实现DOC.docx(41页珍藏版)》请在冰点文库上搜索。
Android平台下的邮箱客户端的设计与实现DOC
摘要
Android是Google公司发布的智能手机平台,该平台具有开放、应用程序平等、应用程序间无界限和方便快速的应用程序开发等优点,成为当今最流行的手机开发平台之一,是当今软件行业的一股重要力量。
本文是利用JavaMail在Android平台上开发邮件客户端,介绍了Android相关知识,JavaMail的使用,最后分析了Android邮件客户端的基本功能和实现模块,并对其中用到的关键方法进行了详细的描述。
在开发过程中,运用了开发工具AndroidStudio和AndroidSDK。
设计了邮件收发的客户端。
系统主要分为五个模块:
登陆、发邮件、收邮件、配置和通讯录。
该系统为用户利用手机Email进行通讯提供了便利。
关键词:
AndroidAndroidStudioJavaMail
第一章绪论
1.1研究内容
本论文目的在于利用java语言在Android平台下的邮件客户端,让用户可以方便的管理邮件服务器上的自己的邮件,方便地发送邮件。
1.2研究意义
当前流行的各大邮件客户端软件的除了最主要的收发信件之外,功能繁多,但是人们平常真正用到的功能很少,很多功能尤其对于那些计算机知识相对缺乏的人来说,更加显得太过于华丽而不太实用,并且很多都市基于PC客户端,对于邮件的实时性,远不及手机。
有鉴于此,我开发了基于Android相对简单实用的邮件客户端,简化了很多不必要的功能。
1.3研究现状和发展趋势
随着科技的发展,手机作为一种非常重要的通讯工具,其功能越来越强大,相对电视、互联网络等方式,手机凭借它可以随时随地获取和处理信息的优势,逐渐成为人们获取信息的一种重要手段。
根据采用的操作系用的不同,市场上手机可分为很多类。
例如WindowsPhone、IOS等等。
近两年来由于Android操作系统具有良好的开放性和平台的便捷性等特点,采用Android操作系统的手机越来越受到人们的青睐。
同时Android操作系统在只能手机领域中所扮演的角色也越来越重要。
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,由Google公司和开放手机联盟领导及开发。
2011年Android在全球的市场份额首次超过塞班系统,跃居全球第一。
2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%,全世界采用这款系统的设备数量已经达到10亿台。
2014年,Android出货量为10.59亿部,市场份额达到81.5%。
1.4开发环境
1.4.1Android开发环境介绍
Android的上层应用程序使用Java语言开发,同时还需要基于Dalvik虚拟机,所以,Google公司推荐使用主流的Java集成开发环境eclipse或AndroidStudio。
因AndroidStudio主要用来做Android开发,针对性更强,所以本次设计使用的IDE采用Google公司推出的AndroidStudio。
只有AndroidStudio
还不够,因为是使用Java语言开发,应该还有Sun公司提供的JavaSDK(其中包括JRE:
JavaRuntimeEnvironment)。
此外,Android的应用程序开发和Java开发有比较大的区别,所以还需要有Google公司提供的AndroidSDK。
简言之,需要以下软件才能搭建Android开发环境,从而进行Android应用程序开发。
1、JavaSDK
2、AndroidStudio
3、AndroidSDK
1.4.2Android开发平台搭建
1、由于国内无法访问Google服务器,可在网上直接搜索其他网站提供的AndroidStudio安装包。
2、在安装过程中选择AndroidSDK安装路径,下载安装AndroidSDK。
第二章Android的相关技术介绍及分析
2.1Android系统架构研究
Android是一个包含操作系统、中介架构层及应用程序所产生出来的软件堆栈架构。
由上而下,其核心为嵌入式linux2.6作业系统,向上搭配Google为Android开发的类库及Android运行时,再配合应用程序框架,来开发各种不同的应用程序。
Android的功能特征:
1、应用程序架构:
在应用程序架构内已经具备多种不同的基础插件,在开发应用程序时,就可以直接调用这些组件来使用,可以节省开发应用程序的心力及时间。
2、Dalvik虚拟机:
在Android平台上所使用Java虚拟机,不是Sun公司的标准Java虚拟机,而是使用Google自主开发的代号为Dalvik的虚拟机,它在保证API方面的兼容的同时,针对移动手机进行了大幅优化,占用资源更小,运行效率更高。
3、集成的浏览器:
集成的浏览器是Android内建的浏览器,是以WbeKit的浏览引擎为基础所开发的。
WbeKit是一个开源浏览器网页排版引擎,目前使用WbeKit引擎的浏览器主要有Safari、GoogleChrome、opera浏览器等。
配合Android手机的功能,可以在浏览网页时,达到更好的效果,例如:
局部性的缩放网页上的资讯、触控式的操作等效果。
4、优化的绘图能力:
在程序里可以用到的绘图功能分为2D和3D两个方面。
在2D方面,Android提供了一套特有的类库(SGL);而在3D方面则是使用OpenGLES1.0规范的类库。
它们是一种非常快的图形引擎,并且支持硬件加速。
5、SQLite数据库:
SQLite提供结构化的数据库存取。
SQLite是一款轻型的数据库,他的设计目标是嵌入式的,目前已经在很多嵌入式产品中使用了它,它占用的资源非常低。
它能够支持Windows/Linux/Unix等主流的操作系统,同时能够跟很多程序语言相结合,不如PHP,Java等,还有ODBC接口,同样比起MySQL、PostgreSQL来讲,它的处理速度比他们都快。
它无需安装和管理配置,它是一个储存在单一磁盘文件中的完整数据库,体积只有250KB但支持数据库大小至2TB。
它虽然很小巧,但是支持的SQL语句毫不逊色与其它开源数据库。
同时它还支持事务功能和并发处理等等。
SQLite也是一套开放性的关联式资料库,其特点在于轻量性方面的设计结构,更适合在手机上使用。
6、多媒体的支持能力:
主要用于播放媒体文件。
这同时包括对音频和视频的支持,并支持“播放URI地址”(URI即统一资源识别地址)模式—在网络上直接播放流媒体。
另外支持各种通用的静态图像格式,例如:
JPG、PNG、GIF等格式。
7、GSM技术:
即全球移动通讯系统,俗称“全球通”,是一种起源于欧洲的移动通信技术标准,是第二代移动通信技术,其开发目的是让全球各地可以共同使用一个移动电话网络标准,让用户使用一部手机就能行遍全球。
GSM技术是属于手机硬件方面的展现,也是开发Android应用程序时可以突出的特点之一。
8、蓝牙、3G及Wi-Fi:
蓝牙是一种新型、开放、低成本、短距离的无线连接技术,可取代短距离的电缆,实现语音和数据的无线传输。
Wi-Fi,即无线保真技术,与蓝牙技术一样,同属于在办公室和家庭中使用的短距离无线技术。
该技术使用的是2.4GHz附近的频段,该频段目前尚属于没用许可的无线无线频段。
其目前可使用的标准有两个,分别是IEEE802.11a和IEEE802.11b。
这些通讯能力也是属于手机硬件方面的展现,也是在开发Android应用程序时可以突出的特点之一。
9、GPS:
即全球定位系统,它是一个覆盖全球的24颗卫星组成的卫星系统。
这个系统可以保证在任意时刻和地点都可以同时观测到4颗卫星,以保证卫星可以采集到该观测点的经纬度和高度,以便实现导航、定位、授时等功能。
这项技术可以用来引导飞机、船舶、车辆以及个人。
这个同样也是属于手机硬件方面的体现,也是开发Android应用程序是可以突出的特点之一。
图2-1是Android架构的五个部分:
图2-1Android架构的五个部分
2.2Android架构分析
2.2.1应用程序框架
在AndroidSDK中,定义了让开发者使用与核心应用程序相同API的权限应用程序框架是为了要简化组件的重新利用而设计的,应用程序可以发布功能为其它应用程序多使用。
但是,这要受限于应用程序架构的安全机制,使用者以用同样的机制来新增、置换组件。
目前所有的的应用程序是有服务及系统来组成,包含有:
1、一套强大和可扩展的的视图系统:
用来构建一个应用程序的基本组件,包括了开发系统画面时,常用的列表、网格、文本框、按钮等控制项,甚至是内嵌的Web浏览器。
2、内容提供者:
使应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据。
3、资源管理器:
提供各种非程序代码的资源让应用程序去使用。
例如:
本字符串、图形文件或排版相关的布局文件。
4、通知管理器:
提供应用程序在状态栏中显示应用程序自定义的提示信息。
5、活动管理器:
管理所有应用程序的生命周期及提供常用的导航回退功能。
例如:
启动应用程序要用到的资源准备及关闭应用程序时释放内存及相关资源等工作。
6、视窗管理器:
用来管理所有启动程序的视窗。
7、位置管理器:
用来管理地图服务的相关功能。
8、电话管理器:
用来管理用户拨打电话与接听电话的相关功能。
9、包管理器:
用来管理所有安装在Android系统内的包。
2.2.2类库
在Android中包含一些C/C++的类库,这些类库能被Android系统中不同的组件来使用。
开发者可以通过应用程序框架使用这些功能。
部分核心类库列表如下:
1、surfacemanager:
主要的功能是让开发者可以去存取/显示系统及管理的功能,在[显示]与[存取操作]间的对应、互动以及实现无接缝的2D/3D多应用程序之间的整合。
例如:
在2D、3D显示上的合成、叠合动作。
2、3Dllibraries:
主要是依OpenGLES1.0规范所定义的3D绘图引擎。
该库使用硬件加速(当硬件可用时),可以将硬件的3D功能做最佳化的处理显示。
3、SGL:
主要是处理有关显示2D方面的绘图引擎。
4、MediaFramework:
主要是以packetVideo公司的openCORE为基础所发展的多媒体类库,该库支持回放和录制大量流行的音视频格式和静态图片。
如:
MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF等格式。
5、FreeType:
主要是用来显示点阵图和处理向量字形的。
6、SSL:
中文名为“安全套接层协议层”,它是网景公司提出的基于WEB应用的安全协议,当前版本为3.0。
SSL协议指定了一种在应用程序协议和TCP/IP协议之间提供数据安全性分层的机制,它为TCP/IP连接提供数据加密、服务器认证、消息完整性以及可选的客户机认证。
它已被广泛的用于Web浏览器与服务器之间的身份认证和加密数据传输。
SSL协议位于TCP协议与各种应用层协议之间,为数据通讯提供安全支持。
SSL协议可分为两层:
SSL记录协议:
它建立在可靠的传输协议之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
SSL握手协议:
它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
SSL协议提供的服务主要有:
认证用户的服务器,确保数据发送到正确的客户机和服务器;
加密数据以防止数据中途被窃取;
维护数据的完整性,确保数据在传输过程中不被改变。
7、SQLite:
SQLite是一个开放性的关联式资料库,能够被应用程序使用的轻量级的关系数据库引擎。
8、webKit:
是一个先进的网页浏览器引擎,被用来构建Android浏览器和内嵌的web视图,也可以让开发者利用这个引擎来做不同的应用。
9、libc:
就是一个BSD标准C类库。
但是,正对linux嵌入式装置进行过最佳化的调整。
2.2.3Android运行时组件
虽然Android是用Java语言来开发、撰写应用程序,但却不使用Java运行时组件来执行Java程序,而是使用了Google自行研发的Android运行时组件来执行程序。
Android运行时组件包括了两个重要的部分,一个是核心类库,另一个是Dalvik虚拟机。
2.3Android应用的构成和工作机制
对于一个Android应用程序来说,是有Activity、IntentReceiver、Service、ContentProvider四部分组成,但并不是每一个Android应用程序都必须由这四部分组成。
在应用程序中使用时,需要在配置文件AndroidMainfest.xml中进行配置。
这个配置文件是每个Android应用程序所必需的,用于定义应用程序的组件、组建的功能以及必要条件等等。
图2-3为Android应用的构成和工作流程:
图2-3Android应用的构成和工作流程
第三章JavaMailAPI研究
3.1JavaMailAPI简介
JavaMailAPI是读取、撰写、发送电子信息的可选包。
我们可用它来建立如Eudora、Foxmail、MSOutlookExpress一般的邮件用户代理程序(MailUserAgent,简称MUA)。
而不是像sendmail或者其他的邮件传输代理(MailTransferAgent,简称MTA)程序那样可以传送、递送、转发邮件。
从另一个角度来看,我们这些电子邮件用户日常用MUA程序来读写邮件,而MUA依赖着MTA处理邮件递送。
3.2相关协议一览
四大信息传输协议:
SMTP、POP、IMAP、MIME,上面的四个协议并不是全部,还有NNTP和其他一些可用于传输信息,但是由于不常用到,所以本文便不提及了。
理解这4个基本的协议有助于我们更好的使用JavaMailAPI。
然而JavaMailAPI是被设计为与协议无关的,目前我们并不能克服这些协议的束缚。
确切的说,如果我们使用的功能并不被我们选择的协议支持。
1、SMTP
简单邮件传输协议定义了递送邮件的机制。
2、POP
POP是一种邮局协议,目前为第3个版本,即众所周知的POP3。
POP定义了一种用户如何获得邮件的机制。
它规定了每个用户使用一个单独的邮箱。
大多数人在使用POP时所熟悉的功能并非妒被支持,例如查看邮箱中的新邮件数量。
而这个功能是微软的Outlook内建的,那么就说明微软Outlook之类的邮件客户端软件是通过查询最近收到的邮件来计算新邮件的数量来实现前面所说的功能。
因此在我们使用JavaMailAPI时需要注意,当需要获得如前面所讲的新邮件数量之类的信息时,我们不得不自己进行计算。
3、IMAP
IMAP使用在接收信息的高级协议,目前版本为第4版,所以也被称为IMAP4。
需要注意的是在使用IMAP时,邮件服务器必须支持该协议。
从这个方面讲,我们并不能完全使用IMAP来代替POP,不能期待IMAP在任何地方都被支持。
假如邮件服务器支持IMAP,那么我们的邮件程序将能够具有以下被IMAP所支持的特性:
每个用户在服务器上可具有多个目录,这些目录能在多个用户之间共享。
其与POP相比高级之处显而易见,但是在尝试采取IMAP时,我们认识到它并不是十分完美的:
由于IMAP需要从其它服务器上接受新信息,将这些信息递送给用户,维护每个用户的多个目录,这都为邮件服务器带来了高负载。
并且IMAP与POP的一个不同之处是POP用户在接收邮件时将从邮件服务器上下载邮件,而IMAP允许用户直接访问邮件目录,所以在邮件服务器进行备份作业时,由于每个长期使用此邮件系统的用户所用的邮件目录会占有很大的空间,这将直接导致邮件服务器上磁盘空间暴涨。
4、MIME
MIME并不是用于传送邮件的协议,它作为多用途邮件的扩展定义了邮件内容的格式:
信息格式、附件格式等等。
一些RFC标准都涉及了MIME:
RFC822、RFC2045、RFC2046、RFC2047.
5、NNTP和其它的第三方协议
JavaMailAPI在设计时考虑到与第三方协议实现提供商之间的分离,我们可以很容易的添加一些第三方协议。
3.3JavaMail安装
1、安装JavaMail
为了使用JavaMailAPI,需要到Oracle官网下载mail.jar开发包,下载成功后,会得到一个.zip格式的压缩文件,然后解压。
将mail.jar文件添加到系统环境变量CLASSPATH中。
2、安装JAF
在安装了JavaMail之后,我们还需要安装JAF(JavaBeansActivationFramework,JavaBeans激活框架),因为这个框架是JavaMailAPI所需要的。
JDK1.6集成了JAF框架,如果使用的是JDK1.6以上版本,则可以不用单独下载JAF框架。
本次设计所用JDK版本为JDK1.7,故无需另安装JAF。
3.4JavaMailAPI详解
1、JavaMail核心类结构
在javax.mail的包下面存在着一些核心类:
Session、Message、Transport、Store、Authenticator、Address、Folder。
而且在javax.mail.internet包中还有一些常用的子类。
它们之间的工作关系,如图3-4-1所示:
图3-1javax.mail核心类工作关系
2、Session
javax.mail.Session类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。
Session对象根据这些会话信息构建邮件收发的Store和Transport对象,以及为客户端创建Message对象提供信息支持。
Session类的构造方法是私有的,所以我们可以使用Session类提供的getDefaultInstance()这个静态工厂方法获得一个默认的Session对象:
Propertiesprops=newProperties();
Sessionsession=Session.getDefaultInstance(props,null);
或者使用getInstance()这个静态工厂方法获得自定义的Session:
Propertiesprops=newProperties();
Sessionsession=Session.getInstance(props,null);
3、Message
当我们建立了Session对象后,便可以构造被发送的信息体了。
在这里SUN提供了Message类型来帮助开发者完成这项工作。
由于Message是一个抽象类,大多数情况下,我们使用javax.mail.internet.MimeMessage这个子类,该类是使用MIME类型、MIME信息头的邮箱信息。
信息头只能使用US-ASCII字符,而非ASCII字符将通过编码转换为ASCII的方式使用。
为了建了一个MimeMessage对象,我们必须将Session对象作为一个MimeMessage构造方法的参数传入:
MimeMessagemessage=newMimeMessage(session);
注意:
对于MimeMessage类来讲存在着多种构造方法,比如使用输入流作为参数的构造方法。
在建立了MimeMessage对象后,我们我们需要设置它的各个part,对于MimeMessage类来说,这些part就是MimePart接口。
最基本的设置信息内容的方法就是通过表示信息内容和MIME类型的参数调用setContent()方法:
Message.setContent(“lgpzll”,”text/plain”);
然而,如果我们所使用的MimeMessage中信息内容是文本的话,我们便可以直接使用setText()方法来方便的设置文本内容。
Message.setText(“lgpzll”);
前面所讲的两种方法,对于文本信息,后者更为合适。
而对于其他一些信息类型,比如HTML信息,则需要使用前者。
使用setSubject(“First”);
4、Address
像Message一样,Address类也是一个抽象类,所以使用javax.mail.internet.InernetAddress这个子类。
通过传入代表邮件地址的字符串,我们可以建立一个邮件地址类:
Addressaddress=newInernetAddress(“lgpzll@”);
如果要在邮件地址后面增加名字的话,可以通过传递两个参数:
代表邮件地址和名字的字符串来建立一个具有邮件地址和名字的邮件地址类:
Addressaddress=newInernetAddress(“lgpzll@”,”lgpzll”);
在建立了邮件地址类后,我们通过message的setForm()和setReplyTo()两种方法设置邮件的发信人:
message.setForm(address);
message.setReplyTo(address);
若在邮件中存在多个发信人地址,我们可用addForm()方法增加发信人:
Addressaddress[]=“”;
Message.addForm(address);
为了设置收信人,我们使用addRecipient()方法增加收信人,此方法需要使用Message.RecipientType的常量来区分收信人的类型:
message.addRecipient(type,address);
下面是Message.RecipientType的三个常量:
Message.RecipientType.TO收件人
Message.RecipientType.CC抄送人
Message.RecipientType.BCC发件人
5、Authenticator
像类那样,JavaMailAPI通过使用授权者类(Authenticator)以用户名、密码的方式访问那些受到保护的资源,在这里“资源”就是指邮件服务器。
在javax.mail包中可以找到这个JavaMail的授权者类(Authenticator)。
在使用Authenticator这个抽象类时,我们必须采用继承该抽象类的方式,并且该继承类必须具有返回PasswordAuthentication对象(用于存储认证时要用到的用户名、密码)getPasswordAuthentication()方法。
并且要在Session中进行注册,是Session能够了解在认证时该使用哪个类。
下面代码片段中的MyAuthenticator就是一个Authenticator的子类。
Propertiesprops=newProperties();
Authenticatoranth=newMyAuthenticator();
Sessionsession=Session.getDefaultInstance(props,auth);
6、Transport
在发送消息时,Transport类将被用到。
这个类实现了发送信息的协议(通称为SMTP),此类是一个抽象类,我们可以使用这个类的静态方法send()来发送消息:
Transport.send(message);
也可由Session获得相应协议对应的Transport实例。
并通过传递用户名、密码、邮件服务器主机名等参数建立与邮件服务器的连接,并使用sendMessage()方法将信息发送,最后关闭连接:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 平台 邮箱 客户端 设计 实现 DOC