基于Android平台的云相册系统设计与实现.docx
- 文档编号:1309082
- 上传时间:2022-10-20
- 格式:DOCX
- 页数:6
- 大小:20.55KB
基于Android平台的云相册系统设计与实现.docx
《基于Android平台的云相册系统设计与实现.docx》由会员分享,可在线阅读,更多相关《基于Android平台的云相册系统设计与实现.docx(6页珍藏版)》请在冰豆网上搜索。
基于Android平台的云相册系统设计与实现
基于Android平台的云相册系统设计与实现
摘要:
随着云计算技术的不断发展,其应用也已延伸到生活的各个领域。
作为一种技术手段和实现模式,云计算使得计算资源成为向大众提供服务的社会基础设施,其目的是实现资源分享与整合。
依托云服务的设计思想,选用Google提供的GAE云平台,结合移动终端上的Android系统,分析并设计了云相册系统,实现了个人相片的“即拍即存即取”功能。
关键词:
云计算;Android平台;个人相册;云相册
0引言
随着互联网、移动互联网以及物联网技术的迅速发展、应用和普及,云计算已经成为新兴技术产业中最热门的领域之一,其应用也延伸到生活的各个方面。
相对于传统模式,云计算模式有着更低的硬件、网络和管理成本,同时拥有更高的资源利用率。
因此,国内外众多的知名公司纷纷推出自己的云计算平台,如Google提供的GoogleAppEngine(GAE)就是一个开发、托管网络应用程序的云平台。
本研究将依托云服务的设计思想,结合移动终端上的Android系统,分析设计并实现个人云相册系统,以满足用户“即拍即存即取”相片、文字数据的需求,避免用户在更换移动终端或者信息误删情况下而造成数据丢失,并能通过云服务器的无限存储容量、高性能计算能力等优点,解决移动终端内存不足问题。
1系统服务端分析与设计
云相册系统服务端主要实现用户相片存储、管理和响应查询浏览功能。
1.1平台选择
系统服务端选择Google提供的GAE云平台,它使用Google的管理数据中心,提供多种云服务,如网址获取、邮件、内存缓存、图片操作等。
使用Google云服务的存储、缓存等服务,应用程序可以根据访问量和数据存储需要的增长轻松扩展,有效地解决当用户数量足够多时,服务器负载压力过大、响应慢等问题;同时采用GAE的BlobStore服务,使得数据存储在云端,这样逻辑上扩大了移动终端的存储空间,并能保证在不同的终端都能对云服务器的数据进行访问。
云服务器对客户端提供透明服务,客户端无需关注具体技术实现细节。
用户只需在Google的GAE页面上注册一个账号,即可创建、添加应用程序。
目前,GAE支持的开发语言有Python、Java以及Go语言,云相册系统将使用Java语言工具。
1.2云相册响应流程
云客户端使用Http协议和云服务器进行交互。
JSP中,常用Servlet读取客户端提交的请求数据,处理后返回响应结果。
模型如图1所示,客户端发送http请求到服务器,WebServer接收到这个请求后,首先在Web容器中检查是否存在该Servlet实例,若不存在则初始化该类,然后调用该类的Service()方法,最后将处理结果返回客户端。
Web服务器上可以部署多个Servlet程序,每一个Servlet程序实现了Java特殊的接口,它负责处理对应的一个或者多个URL请求。
可以在Web.xml中使用Servletmapping元素将定制的URL与Servlet相关联。
Web服务器在加载Web.xml文件后,根据配置的Servlet名称,加载对应的Servlet类。
云相册服务端封装了一个统一的AnywhereServlet类,以及多个响应Action,并在Web.xml中配置AnywhereServlet.java以统一接收客户端请求的Servlet:
com.server.AnywhereServer.servlet.AnywhereServlet
1.3云相册数据存储
云相册服务器在接受客户端请求后,最重要的处理就是保存数据,如将客户端发送的相片和文字进行持久化存储。
Bigtable是最直观的GAE存储方法,被设计用于处理海量数据。
它是一个稀疏的、分布式的、持久化存储的多维度排序映射,不支持完整的关系数据模型。
相反,Bigtable为用户提供了简单的数据模型,利用这个模型,客户可以动态控制数据的分布和格式。
尽管存在文件大小限制的缺点,即每个文件不超过1MB,但是仍然可以使用Bigtable来存储一些账户信息,例如注册账户、账号密码等。
当需要存储大数据文件时,例如相片、多媒体文件,则需要使用Blobstore存储方式。
这是另一个基于<键,值>的存储方法,它最大能够保存和显示2GB的文件。
虽然Blobstore不存在数据大小方面的问题,但它在使用上还是存在不友好因素,即需要客户端发送两次请求:
第一次用于获得文件数据存储的URL,第二次使用上一次获得的URL发送提交真正的数据。
在这点上,不仅浪费了用户宝贵的网络资源,同时也消耗了更多的云服务器CPU资源。
在云相册系统中,相片数据使用Blobstore方式来存储,其它用户数据均使用BigTable方式存储。
2系统Android客户端实现
云相册系统的客户端选用占领智能手机市场半壁江山的Android系统平台。
客户端通过网络以及调用接口方式,实现与云服务端的数据交互,以及系统客户端具体业务逻辑。
2.1Android客户端与云服务器交互
云计算体系中的SOA构建层将云计算服务封装成标准的WebService,使得云计算客户端可以使用浏览器简单便捷地访问并使用这些服务。
Android可以像浏览器一样,调用WebService接口实现和云服务端进行数据传输,通过标准化的定义服务接口,使得构建在系统中的各种服务以统一和通用的方式进行交互,也可以直接发送http请求和业务数据。
客户端调用WebService时,数据使用XML格式;而直接发送http请求,则可以选择使用JSON数据格式。
XML和JSON在可读性上都同样出色。
XML使用自定义标签,意义清楚,但数据冗余较多,提供了对大规模数据的逐步解析方案,这种方案比较适合于对大量数据的处理;JSON则因为语法简单,所以可读性好,解析较少的数据时能起到良好的效果。
显然,JSON是轻量级的,它易于使用,并且容易转换到Java对象。
因此,当数据较少时,直接使用http方式发送请求效率更好。
本系统编写了一些工具类,利用这些工具类,客户端将能够轻松实现用户登录、相片上传等具体业务,主要有:
(1)Task.java。
用于创建http请求,通过构造JSON数据格式的请求参数,设定网络请求方式,即可简单快捷地创建网络请求任务。
(2)HttpHelp.java。
用于实现3种方式发送http请求,有直接get方式、post方式以及携带文件或者图像数据的post方式。
(3)Worker.java。
在设定回调侦听者之后,实现数据后台异步加载并回调服务器返回的后续业务流程。
2.2注册登录模块
运行客户端之后,首先进入登陆界面。
若未有登陆账号,可以点击“注册”按钮进行注册。
注册成功后,云服务器将返回用户ID,用户使用此ID账号进行系统登录。
客户端发送请求:
构建登录所需要的JSON参数,分别为动作类别(Login)、账号以及密码。
将JSON格式数据添加到Task的参数中,然后执行Worker,即可将登录请求发送到云服务器。
服务器根据动作类别判定执行用户登录验证流程,并返回验证结果。
同时,在worker中注册了一个侦听回调函数parseData(),解析云服务器返回结果,用于判断服务器是否通过本次登录。
2.3拍照上传模块
登录系统后,在主面板上点击“拍照上传”按钮,进入客户端拍照上传模块,主要实现手机客户端相片数据采集功能,然后使用手机网络服务,将数据上传到云服务端。
Android拍照可以有两种方式,第一种是直接发送命令,调用系统拍照功能:
Intentintent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent,0);
在拍照完成后,得到相片数据:
Bundleextras=data.getExtras();
Bitmapb=(Bitmap)extras.get("data");
采用这种方式,软件稳定,无需担心各种系统问题。
但因为调用了系统相机界面,无法做到界面定制,所以用户体验可能会相对差一些。
第二种则是通过继承SufaceView来编写自定义预览界面,使用Camera进行数据捕获。
本系统采用此种方法,在采集页面布局文件中设定预览窗口。
在onCreate中取得SurfaceView为一个显示面板,并通过显示面板得到其SurfaceView控制器,定义MySurfaceCallback类,重载控制器的Callback,主要用于操作CameraAPI,通过控制Camera调用底层摄像头接口,完成预览图片,拍摄图片等功能。
mSurfaceView=(SurfaceView)findViewById(R.id.mysurfaceview);
mSHolder=mSurfaceView.getHolder();
mSHolder.addCallback(newMySurfaceCallback());
mSHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
在实际应用中,用户点击“预览”按钮时,系统将打开摄像头,进入预览模式;点击“停止”按钮可以停止预览;点击“摄像”按钮进行图像抓捕,若不满意图像,可以点击“放弃”按钮重新选取画面。
当用户抓拍好相片时,点击“详细”按钮,系统弹出相关信息表单填写界面,用户可以自由输入。
最后,点击“提交”按钮将数据发送云服务器存储,代码如下:
privatevoidsubmit()
{
if(mTask.mDataExt==null||mTask.mUrl.length()<1)
{
return;
}
try
{
JSONObjectparam=newJSONObject();
param.put("action","PhotoAdd");//上传的动作类别
param.put("euid",Login.mEuid);param.put("title",mTitle.getText().toString());
param.put("addr",mAddr.getText().toString());
param.put("introduction",mIntroduction.getText().toString());
param.put("detail",mDetail.getText().toString());
//将采集的描述信息添加到json参数中
mTask.mType=Task.TYPE_POST_FILE;//携带文件的POST方式
mTask.mEncode=Task.ENCODING_UTF8;
mTask.mParam=param;
Worker.execute(this,mTask,newWorker.TaskListener()
//使用工具类Worker
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Android 平台 相册 系统 设计 实现