APP下载

基于Android平台网络相册的设计与实现

2013-08-13李宁宁郑纯军

电视技术 2013年15期
关键词:换肤适配器服务器端

李宁宁,郑纯军

(大连东软信息学院计算机科学与技术系,辽宁 大连 116023)

责任编辑:许 盈

随着Android手机和网络的迅速发展和普及,二者相结合的应用与日俱增。而移动终端受自身资源有限的约束,无法满足终端应用高存储的需求[1],因此手机往往会影响图片的大量存储工作。为了解决这一矛盾,本文设计了基于Android的网络相册系统。该系统的客户端为Android手机,用户可以进行拍照、浏览图片,然后将选中的图片上传至微博或网络服务器上,从而借助网络服务器的空间分担客户端的存储压力,节省了手机空间。

本文介绍了在Android上进行网络相册系统的开发与设计,使用Android平台推出的SDK和Eclipse开发环境实现了本地相册的图片浏览、编辑、上传,网络相册的管理、换肤和网络设置等,并可以在模拟器以及真机上运行。

1 系统体系结构和关键技术

Google公司推出的Android智能手机平台系统,以其开源、开放和优异便捷的开发架构,吸引了众多程序开发者[2]。本文以网络相册系统中涉及到的技术为主线,着重介绍相关的知识点并阐述该技术在本系统中的应用。根据用户的需求和软件的特点,本系统的功能设计与体系结构如图1所示。

图1 网络相册体系结构

1.1 ListView

本文的界面主要是利用GridView和ListView组件进行设计的。二者的编程过程比较类似,所以本部分仅以ListView为例进行简单介绍。ListView是Android编程中最重要的组件之一,因为其数据来源灵活并可以实现自身的样式定制。ListView中的列表数据是通过适配器将其映射到组件中。列表的适配器类型有ArrayAdapter、SimpleAdapter和SimpleCursorAdapter三种,也可以通过继承BaseAdapter类自己定义适配器。在自定义的适配器类中,编程人员通过实现getView 方法为其第二个参数convertView进行赋值,实现自己定义的显示效果。本相册中,需要在列表中包含删除按钮,所以选择自定义适配器方式:首先定义一XML布局文件,设计出ListView中的item样式;自定义适配器类,并定义内部holder类,用来盛放ListView中每一项的内容;最后将getView中的convert-View赋值成设定的内容。

1.2 Intent

Intent为 Activity,Service和 BroadcastReceiver等组件提供交互能力[3]。在本系统中,有多个自定义的Activity组件,并多次调用系统功能界面(例如网络设置、拍照),通过广播组件实现了换肤功能等,为此,系统中通过Intent连接不同的组件。系统功能界面的调用是通过Intent的隐式启动,匹配系统功能界面的action实现调用。例如拍照功能的启动,只需要如下代码:

1.3 AndroidManifest.xml文件

AndroidManifest.xml清单文件是每个Android项目都必需的,它是整个Android应用的全局描述文件[4]。系统中定义的Activity组件和BroadcastReceiver组件都需要在AndroidManifest.xml中进行注册,并通过action和categry指定主启动界面。另外,由于Android系统运行在Linux内核上,有严格的安全及权限机制。本模块要使用到网络连接和SD卡的访问,这都需要具有相应的权限,需要在AndroidManifest.xml中通过为 < manifest…/> 元素添加<uses-permission…/>子元素即可为自身声明权限,否则无法正常运行,且编译过程中,程序不会报错,只能通过捕获异常来发现这一问题。Android中提供了大量的权限,这些权限都位于Manifest.permission类中。

1.4 图片存储

在本系统中,本地相册需要访问存储在外部设备(SD卡)中的所有图片。图片信息存储在android.provider.MediaStore.Images.Thumbnails 数据库中,通过 Cursor可以读取图库里的所有图片的相关信息,包括图片的名称、类型、大小、时间、路径等。本系统主要使用对该数据库的信息查询功能,调用ContentProvider组件的query函数实现。

而对于网络服务器部分的图片存储,是根据当前用户名命名文件夹,然后将所有图片放置其中。每个用户只能管理自己文件夹下的图片。

2 系统设计

本系统采用的客户端/服务器的架构。客户端(即手机端)负责拍照、本地图片管理等功能——集成了手机上的图库和相机软件的功能,并增加了换肤、美化等模块;服务器端负责接收上传图片、管理网络图片等。为完成网络相册各模块的功能,客户端建立了Android SDK+Java JDK+E-clipse的开发环境,基于Android 2.2版本开发;服务器端采用MyEclipse+Tomcat+MySQL的组合进行开发。

2.1 客户端设计

客户端采用Android系统,它基于Linux平台,自底向上由4个层次组成:Linux内核层、Android运行时库和其他库层、应用框架层、应用程序层。本文的网络相册系统是应用程序层的开发。Android应用程序开发是基于框架和组件的。

为了在主界面中包含本地相册、网络相册和其他3个部分的功能,本系统采用的是TabActivity和TabHost组织完成。TabHost是一个装载Tab的容器,每个Tab项可以加载一个布局,可以通过TabActivity的getTab-Host()方法获得TabHost对象,TabHost中提供了添加及修改Tab页的方法。

2.1.1 本地相册

本地相册首页采用GridView来完成。GridView组件是网格视图,其中的每一个条目通过适配器和该组件进行关联。本系统自定义了适配器类型,其中包含一个ImageView和一个TextView组件,分别用来显示文件夹下的图片和图片名称、个数。进入到选中的文件夹下后,选择待浏览图片,则以Gallery组件显示其中的图片内容。Gallery是图片浏览组件,主要实现横向显示图片列表。为此,需要创建一个适配器,负责获取图片资源,并通过重写getView方法,实现设置图片显示效果。

对于选中的图片,可以进行分享、上传至网络相册,编辑,删除,重命名,图片美化等操作。“分享”功能是将图片上传到已注册的微博账号中进行发布,主要是借助Intent的createChooser函数选择相关的微博客户端进行上传;“上传至网络相册”是将图片上传到本系统搭建的网络服务器中;“编辑”功能是借助于Android中自带的裁剪功能完成的,即调用“com.android.camera.action.CROP”的Intent,通过传递相应的参数来实现;“删除”和“重命名”功能主要是通过调用文件的delete和rename-To函数完成;“图片美化”是通过设置画笔的颜色、粗细、特效等对图片进行绘制,在onOptionsItemSelected函数中判断单击的是哪个菜单,并作出响应操作。

2.1.2 网络相册

网络相册部分,根据用户名,管理各自部分的图片,包括下载图片、删除图片等功能。首先,用户需要注册,然后登录到自己的相册中,其中以ListView组件列出了该用户文件夹下的所有图片。该ListView的每一项中包含了ImageView,TextView和ImageButton三个控件,分别用来显示图片、图片名称和删除按钮。View的find-ViewById方法比较耗时,为了提高效率,因此需要考虑只调用一次,借助于ViewHolder将以上三个控件进行封装,同时充分利用!=null的判断。

2.1.3 其他

其他功能主要包括拍照、换肤和网络设置。拍照调用的是Android系统中的相机功能;换肤是采用最简单的原理:将所有的背景图片以GalleryFlow的形式进行显示,确定好背景图片后,利用BroadcastReceiver组件更新所有的背景图片;网络设置是调用Android系统中自带的网络设置功能。

2.2 网络服务器端设计

网络服务器端的搭建,是用 MyEclipse工具集成Tomcat服务器开发,并采用MySQL数据库存储用户及其图片信息。服务器端主要实现与手机客户端的图片传输功能:将客户端上传的图片存储到服务器的用户名文件夹下;根据手机当前登录用户,提供对应的图片供其浏览和下载。根据MVC的编程思想,本系统虽然没有用户界面层,依然将业务逻辑层和控制层分开——业务逻辑层实现图片的删除、下载等功能;控制层由Servlet编程实现。

3 系统实现

3.1 程序实现

手机客户端在Eclipse开发环境下,使用Java语言,设计和实现了基于Android平台的网络相册程序,并在真机和模拟器上分别进行了测试,得到了预期的效果。采用的平台版本不能低于Android 2.2。网络服务器端提供了图片的存储空间和信息管理,并保证能和客户端进行通信和图片传输。

图2所示为网络相册在真机上运行时的主界面,即本地相册的图片缩略图,列出了所有含有图片的文件夹,并显示出图片个数。图3所示为网络相册在模拟器上运行时的网络相册部分列表界面,即从网络服务器上获取用户文件夹下所有的图片,并以自定义的ListView样式进行显示。图4所示是换肤功能中,选择背景图片的界面效果。

3.2 优化

基于Android平台的网络相册应用程序,如果需要大量的图片浏览,往往会因为内存溢出而使程序崩溃。因此该系统对此进行了优化处理,GridView和ListView中的图片均经过了压缩处理,显示的是压缩效果图。图片不是通过文件的输入输出流进行读取的,而是通过ContentProvider的Cursor进行遍历的。

网络图片的下载,会由于网速、图片大小的限制,影响程序的运行速度。因此,对于图片的下载进行了异步处理,每次下载时创建一个新的线程,在run函数中完成图片下载的过程。

4 结语

本文开发实现了基于Android平台的网络相册应用程序,完成了包括客户端和服务器端功能框架的设计开发和系统部署,可以为手机用户提供本地、网络相册存储和管理功能,即在保证了系统自带的图库功能的基础上,主要增加了网络存储功能,并整合了拍照、美化、换肤等功能。验证了该应用程序的实用性和可行性,也为广大的Android开发者提供了参考。

[1]王培海.基于Android的移动云存储系统设计与实现[J].电视技术,2011,35(15):94-97.

[2]杨丰盛.Android应用开发揭秘[M].北京:机械工业出版社,2010.

[3]王向辉,张国印,沈洁.Android应用程序开发[M].北京:清华大学出版社,2010.

[4]李刚.疯狂Android讲义[M].北京:电子工业出版社,2011.

[5]黄艺峰,闫巧.基于Android平台电子词典的设计与实现[J].计算机应用,2011,31(S2):228-232.

猜你喜欢

换肤适配器服务器端
“刷酸”能变美采用要慎重
“刷酸”过度可致“烂脸”
油痘肌的换脸术
Linux环境下基于Socket的数据传输软件设计
基于3D打印的轻型导弹适配器
潜空导弹垂直发射出筒适配器受载变形仿真研究
基于Qt的安全即时通讯软件服务器端设计
基于Qt的网络聊天软件服务器端设计
电源适配器怎么选
美国麦格普公司新型M—LOK相机三脚架适配器