版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 太原理工大学毕业设计(论文)用纸 绪 论1.1 本课题研究背景和意义智能手机(Smartphone)是指“像个人电脑一样具有独立的操作系统可以由用户自行安装软件、游戏等第三方服务商提供的程序.通过此类程序来不断对手机的功能进行扩充,并可以通过移动通讯网络来实现无线网络接入的这样一类手机的总称”。目前,全球多数手机厂商都有智能手机产品,而韩国三星、芬兰诺基亚、美国苹果、加拿大RIM、黑莓、美国摩托罗拉、中国台湾宏达htc都是智能机中的佼佼者1。 智能手机具有五大特点:1、具备了无线接入互联网的能力,即要有GSM的支持网络下的GPRS或者是CDMA网络支持下的CDMA 1X或3G网络。2人性化,
2、可以根据个人需要扩展机器的功能。3、它是具有开放性的操作系统,还可以安装非常多的应用程序使得智能手机的功能可以得到无限的扩展。4、具有PDA功能,其中包括个人信息管理、日程记事、任务安排、多媒体应用、浏览网页等。5扩展性能强,第三方软件支持多2。 Android是一种以Linux为基础的开放源码操作系统主要使用于便携设备。目前尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,最初主要支持手机。2005年由Google收购注资并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上。Android的主要竞争对手是苹果公司的iOS
3、以及RIM的Blackberry OS。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2014年2月数据,Android占据全球智能手机操作系统市场78.5%的份额,中国市场占有率为90.4%3。 1.2 课题研究现状Android 是Google开发的基于Linux平台的开源手机操作系统。它包括操作系统、用户界面和应用程序移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍。Google与开放手机联盟合作开发了 Android,这个联盟由包括中国移动、摩托罗拉、高通、宏达电和 T-Mobile 在内的30多家技术和无线应用的领军企业
4、组成。Google通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,希望借助建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。作为谷歌企业战略的重要组成部分,Android 将进一步推进“随时随地为每个人提供信息”这一企业目标的实现。全球为数众多的移动电话用户正在使用各种基于 Android 的电话。谷歌的目标是让(移动通讯)不依赖于设备甚至平台。出于这个目的,Android 将补充,而不会替代谷歌长期以来奉行的移动发展战略:通过与全球各地的手机制造商和移动运营商结成合作伙伴,开发既有用又有吸引力的移动服务,并推广这些产品。近两年来由于Andro
5、id操作系统具有良好的开放性和平台开的便捷性等特点,采用Android操作系统的手机越来越受到人们的青睐。同时Android操作系统在智能手机领域中所扮演的角色也越来越重要。考虑到Android广阔的市场前景,本文将Android操作系统作为课题的研究对象。1.3 本论文的组织结构本论文共分七章第1章 绪论,这一章主要是对本次毕业设计所开发的系统进行问题的定义,通过问题的定义明白需要做些什么,并且对开发内容简单的介绍了一下;同时本章还对课题的研究背景与研究意义进行分析,对开发本系统的可行性分析还有对论文各章内容的简要介绍。第2章 系统理论知识,对涉及到的理论知识和用到的开发工具做相关阐述。第3
6、章 系统分析,主要介绍了本系统需要实现的功能模块和本系统的数据库设计、页面的详细设计等。第4章系统设计,主要介绍了本系统的整个设计过程、设计思路以及设计中应该注意的问题。第5章 系统实现,主要介绍了本设计的实现环境和实现,详细分析了系统各个核心模块的实现过程、实现方法和实现结果。第6章 系统测试与分析,详细介绍了软件测试在整个软件开发环节的重要性和必要性,也分析了软件测试的各种目的,周给出了本系统的测试过程与结论最后:总结、致谢、参考文献。2 关键技术介绍2.1 什么是AndroidAndroid是首个基于Linux平台的开源手机操作系统,该平台由操作系统中间件,用户界面和应用软件组成号称是首
7、个为移动终端打造的真正开放和完整的软件。Android一词的本义指“机器人”,2003年美国有一家以Android为名的小公司成立,开发手机平台。Google收购Android之后,于07年11月5日发布了开源的Android平台一款包括操作系统(基于Linux内核)、中间件和关键应用的手机平台,并组建了开放手机联盟(Open Handset Alliance),包括Google、中国移动、T-Mobile、宏达、高通、摩托罗拉等领军企业。2008年9月22日,美国运营商T-Mobile USA在纽约正式发布第一款Google手机T-Mobile G1。该款手机为宏达电制造,是世界上第一部使用
8、Android操作系统的手机。2.2 Android系统架构简介从软件分层的角度来看,Android平台由应用程序,应用程序框架,Android运行时,库以及Linux内核共5部分构成。如图2-1所示。图2-1 整体结构2.1.1 应用程序(APPLICATIONS)Android平台默认包含了一系列核心应用程序,包括电子邮件、短信、日历、地图、浏览器、联系人管理程序等,这些程序都以java 程序语言编写,你也可以用自己便携的应用程序来替换Android提供的应用程序,这个替换的机制实际是由应用程序框架来保证的。如图2-2所示。图2-2 应用层2.2.2 应用程序框架(APPLICATION
9、FRAMEWORK)应用程序框架是我们进行Android开发的基础应用程序框架层包含了视图系统,内容提供器,窗口管理器,活动管理器,通知管理器,位置管理器,资源管理器,电话管理器和包管理器9大部分。如图2-3所示。图2-3 中间件层2.3.3 Android 运行时(RUNTIME)Android 虽然采取Java程序语言来编写应用程序,但不使用J2ME执行Java程序,而是用Android自有的Android运行时(RunTime).Android 运行时包括核心库和Dalvik虚拟机两部分。如图2-4所示。图2-4 核心库,虚拟机2.3.4 系统库(LIBRARIES)应用程序框架是贴近于
10、应用程序的软件组件服务,而更底层则是Android的函数库,这一部分是应用程序框架的支撑,其架构如图2-5所示。图2-5系统库2.3.5 LinuxAndroid平台是开放,采用Linux内核则是Android平台开放性的基础。Android平台中的操作系统采用了Linux2.6版的内核,它包括了显示驱动、摄像头驱动、Flash内存驱动、Binder(IPC)驱动、键盘驱动、wifi驱动、Audio驱动以及电源管理部分。Linux内核层为我们在软件层和硬件层建立了一个抽象层,使得应用程序开发人员无需关心硬件细节。对于手机的开发商而言,如果想要Android平台运行到自己的硬件平台上就必须通过对
11、Linux层进行修改,通常要做的工作就是为自己的硬件便携驱动程序。2.3 SQLite数据库Android采用SQLite这个轻量级数据库工具来管理数据;SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速
12、度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至今已经有12个年头,SQLite也迎来了一个版本 SQLite 3已经发布。SQLite实现了多数的SQL-92标准,包括事务,就是代表原子性、一致性、隔离性和持久性的(ACID),触发器和多数的复杂查询。不进行类型检查。你可以把字符串插入到整数列中。例如,某些用户发现这是使数据库更加有用的创新,特别是与无类型的脚本语言一起使用的时候。其他用户认为这是主要的缺点。多个进程或线程可以同时访问同一个数据而没有问题。可以同时平行读取同一个数据库。但同一时间只能有一个进程或线程进行数据写入;否则会写入失败并得到一个错误信息(或者会
13、自动重试一段时间,而这重试时间的长短是可以设置的)。程序设计者还提供了一个叫做sqlite3的独立程序用来查询和管理SQLite数据库文件。SQLite的用户可以把这个程序当作如何写SQLite应用程序的示例。3 网页浏览器分析本章首先介绍了基于Android的网页浏览器的可行性,确立了开发基础,直接详细阐述了系统各个模块的详细需求分析,接着分析了系统的研究路线和系统的流程设计。3.1 软件分析概述系统分析是在总体规划的指导下,对某个或若干个子系统进行深入仔细地调查研究,确定新系统逻辑功能的过程。这一阶段的主要任务是由系统分析员了解每个业务流程,工作流程,广大用户的需求,运用系统开发理论、开发
14、方法和开发技术设计出一个计算机化的信息系统。例如本软件网页浏览器,首先我们把系统分成主界面、页面浏览模块、历史记录模块和下载模块四大模块。在系统分析中存在很多困难,为了克服困难,做好分析工作,在进行系统分析时应遵循系统分析的原则,这样才能保证分析工作能够顺利进行,系统分析的原则包括逻辑设计与物理设计分开的原则、面向用户的原则和结构化分析的原则。通过实际调查并与相关用户交流后,分析基于Android网页浏览器系统的具体的要求,确定本系统的逻辑功能,以满足用户的各项要求,完成相应的各项功能,提高浏览器的实用水平。在近期目标完成后,该系统应该有很强的扩充性,便于在此基础上进行扩充式开发,为以后的发展
15、及扩充打好基础。 该系统采用以抽象和分解为手段,并且采用结构化分析方法进行系统分析,根据实际调查研究,对系统进行自顶向下的逐层分解,逐步细分,逐步求精,建立新系统的逻辑模型,这个逻辑模型将尽可能避免使用计算机术语,让其尽可能的简单化、通俗化,便于设计者和浏览者的沟通与交流经验。结构化分析方法的基本思想是该系统采用结构化分析方法,以抽象和分解为手段,对系统进行自顶向下的逐层分解,逐步细分,逐步求精,从而达到易于理解的目的。3.2 网页浏览器分析浏览器是指可以显示网页服务器或者文件系统的HTML文件内容,并让用户与这些文件交互的一种软件。网页浏览器主要通过HTTP协议与网页服务器交互并获取网页,这
16、些网页由URL指定,文件格式通常为HTML,并由MIME在HTTP协议中指明。随着移动终端和3G智能手机的普及,移动浏览器的发展也变得突飞猛进。未来手机浏览器的蓝图将是:具有高速上网性能的强劲内核,保证手机上网的速度和体验;应用开发者们在手机浏览器所搭建的开放平台之上开发丰富应用,用户可以从应用中心中随意的安装和卸载,实现手机浏览器个性化,在不牺牲手机浏览器性能的同时,增强手机浏览器的功能,让手机浏览器成为真正的上网入口和应用承载平台。由此本设计完成一个基于Android平台的移动端网页浏览器也就具有非常大的实际意义和实用价值。3.3 系统需求分析本系统提供了数据浏览器、浏览器数据发送等等功能
17、,通过调查并分析,确认系统要完成以下功能:1.网址智能补全 浏览器地址栏支持网址自动补全功能,减少用户输入,提高用户操作体验。2.浏览器浏览模块作为系统核心模块,浏览器浏览模块支持各种网页地址浏览,支持后退、前进以及刷新操作.3.历史记录与导航浏览器记录用户浏览历史,支持用户浏览历史的查询与删除操作,同时主界提供采 用网站入口例如百度、腾讯网等入口;4.下载模块 本浏览器支持文件下载,独立下载模块界面; 整个系统的整体功能框架如图3-1所示。图3-1 系统功能框架图4 网页浏览器详细设计4.1 系统设计原则浏览器软件设计是确定系统如何建立的过程。良好的软件系统来源于良好的系统设计。系统设计应该
18、提供完整、准确、规范的系统设计文档。在系统设计中,首先应该注意的是设计的统一和准确。设计统一即将系统视为一个有机整体,要求设计具有统一的设计规范和标准。设计准确即设计描述应该力求避免模糊或二义性。此外,在进行系统设计过程中,还应该遵循的主要原则如下。1、适用性原则系统总的目的是保证系统功能目标的实现,即满足客户的需求,是所有应用软件最基本的原则。在满足系统需求的前提下,应该从系统用户角度考虑,使设计的系统操作简单化,易用化。应该以降低系统的成本为目标,避免一味追求技术上的先进而不考察应用效益。没有市场和应用前景的软件项目开发是失败的。而浏览器作为移动端重要入口,其市场价格是非常可观的.2、可靠
19、性安全性原则可靠性和安全性是系统重要的需求之一,也是系统设计质量的重要指标。网络科研管理系统工作在网络环境中,对于现在大量存在于网络的病毒、黑客攻击等安全威胁,应该具有一定的防御能力,对于网络带宽和访问量等外界运行环境的变化,应该具有较强的适应能力。只有安全可靠的系统才能发挥其应有的功能。3、可扩展性原则系统的设计应该提供可扩展能力,以满足未来科研工作需求的发展和变化。主要可以采用分布式设计、系统结构模块化设计等技术手段,把系统设计为多个功能相对独立的模块,降低系统的祸合度,提高系统的可扩展性。希望通过Android和地图技术的支持,设计出一个基于Android的网页浏览器系统,设计过程中希望
20、能够从效能、逻辑和稳定性等多方面进行综合考虑,力求最后产品界面能够一目了然,让用户容易上手并且不容易出错。4.2 系统流程设计在设计和开发系统过程中,采用了一些相对比较成熟、安全性较高、运行比较稳定的技术。这些技术贯穿了整个系统的设计与开发过程,是设计和实现各个模块的基础技术,只有运用先进的设计模式和开发技术,才能保证开发工作顺利地进行,才能保证系统设计的合理性和灵活性,才能保证各个功能模块的稳定性。本系统的设计初衷是用户进入系统后,可以看到各种常用的网站导航模块,整个系统的流程图如图4-1所示。图4-1 系统流程图4.3 文件结构设计在程序开发阶段,首先确定“即Android的网页浏览器”的
21、工程名称为BrowserApp,根据程序模块设计的内容,建立BrowserApp项目, BrowserApp项目,的文件结构如图4-2所示:图 4-2 工程结构图为了使代码文件结构更加清晰, BrowserApp工程设置了多个命名空间,分别保存了用户界面、数据适配器、常用类库和实体多个包,源代码的名称以及说明如表3-3所示:表 4-1 系统代码结构包名称文件名说明com.mm.browserapp.activitySplashActivity.java闪屏界面视图com.mm.browserapp.activityHomeActivity.java系统主界面视图com.mm.browserap
22、p.activityWebsiteActivity.java网页浏览界面视图com.mm.browserapp.activityHistoryListActivity.java浏览历史界面Android的资源文件保存在/res的子目录中。其中、/res/anim目录中保存的是产生动画效果的XML文件,/res/drawable/目录中保存的是图像文件,/res/values目录中保存的是用来自定义字符串和颜色的文件,/res/xml目录中保存的是XML格式的数据文件。所有在程序开发阶段可以被调用的资源都保存在这些目录中,具体每个资源文件的用途可以参考表3-4:表 4-2 资源文件名称及用途资源
23、目录文件名说明Drawablebtn_blue_selector.xml按钮资源文件btn_white_selector.xmlLayoutactivity_home.xml主界面布局文件activity_website.xml页面浏览界面布局文件valuesstyles.xml样式资源文件colors.xml颜色资源文件strings.xml字符串资源文件5 网页浏览器实现本章介绍本系统的各个模块的设计和实现。首先在Eclipse中配置好ADT和Android SDK等开发环境,然后新建一个Android项目,项目名为Hairstyle,然后在Android项目中的AndroidManife
24、st.xml文件中配置本软件需要使用的权限。5.1 开发环境搭建任何事物要运行,都要有它的环境,Android也有它的环境才能够运行,下面介绍Android的开发环境配置。搭建开发环境需要的软件:操作系统:window XP或linux软件包:Android SDK(Software Development kit Java Development kit) 、ADT(Android Develoopment Tool)IDE环境:Eclipse IDE+ADT Eclipse3.3以上JDK:Java Runtime Environment虚拟机 、(JDK)Java Development
25、 kit安装步骤如下:第一步:安装Java虚拟机sun-java6-jdk版本。第二步:安装Eclipse3.5工具,到官网 HYPERLINK /downloads/ /downloads/,选择版本下载后进行安装。(如图5.1)Eclipse工具的版本如图5-1所示:图5-1 Eclipse工具的版本图第三步:安装Android SDK:首先要下载SDK,可以在这个网址下载Http:/developer.A/sdk ,选择相应的系统进行安装。sdk下载的地址图如图5-2所示:图5-2 sdk下载的地址图第四步:安装Android ADT插件。运行Eclipse,选择help-install
26、 new software 选择add,将会弹出一个【Add Site】对话框。【Add Site】对话框如图5-3:图5-3 【Add Site】对话框图点击OK,选择要安装的软件,占next,然后选择接受协议,直到安装成功,重启Eclipse软件,设置Android SDK Home,Window-refrence。设置Android SDK Home界面如图5-4所示:图5-4设置Android SDK Home界面图在SDK location中输入SDK Tools路D:AndroidsoftwareAndroid-sdk-windows 点击OK,这样Android环境就已经搭建成功
27、了。5.2 欢迎界面实现一般的手机客户端软件启动时都会通过加载一个欢迎界面,该界面主要用来描述本软件的一些相关信息,例如软件名称等。本网页浏览器启动时也通过一个Activity来加载一个欢迎界面,用户进入该界面后停留一秒钟软件即会自动跳转进入到新闻客户端的主界面里。实现核心代码:public class SplashActivity extends BaseActivity private final long m_dwSplashTime = 2000;private boolean m_bPaused = false;private boolean m_bSplashActive = tr
28、ue;Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);ImageView imageView = new ImageView(this);imageView.setScaleType(ScaleType.CENTER_CROP);imageView.setImageResource(R.drawable.splash);setContentView(imageView);Thread thread = new Thread(new Runnable() Over
29、ridepublic void run() try long ms = 0;while (m_bSplashActive & ms m_dwSplashTime) Thread.sleep(1000);if (!m_bPaused)ms += 1000;startActivity(new Intent(SplashActivity.this, HomeActivity.class); catch (Exception ex) finally finish(););thread.start();Overrideprotected void onPause() super.onPause();m_
30、bPaused = true;Overrideprotected void onResume() super.onResume();m_bPaused = false;Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) super.onKeyDown(keyCode, event);switch (keyCode) case KeyEvent.KEYCODE_MENU:m_bSplashActive = false;break;case KeyEvent.KEYCODE_BACK:android.os.Process.ki
31、llProcess(android.os.Process.myPid();break;default:break;return true;具体的实现界面如图5-5所示:图5-5 欢迎界面5.3 浏览器主界面实现用户打开浏览器后即可看到本软件的主界面,主界面主要由三部分组成,分别是浏览器地址栏、导航栏和浏览历史列表。用户可以在浏览器地址栏输入网址或者关键字进行浏览或搜索,同时主界面的导航栏包括了我们日常经常用到的各种网站入口,例如百度、腾讯网等网站,方便用户浏览操作。最下方是用户的浏览历史记录。实现核心代码:private void findview() btnGO = (Button) fin
32、dViewById(R.id.btnGO);btnGO.setOnClickListener(this);etAddress = (AutoCompleteTextView) findViewById(R.id.etAddress);grd = (GridView) findViewById(R.id.grd);/ 构造底部分享菜单grd = (GridView) findViewById(R.id.grd);ArrayListHashMap lstImageItem = new ArrayListHashMap();for (int i = 0; i menutext.length; i+)
33、 HashMap map = new HashMap();map.put(ItemImage, itemImagesi);map.put(ItemText, menutexti);lstImageItem.add(map);SimpleAdapter saImageItems = new SimpleAdapter(this, lstImageItem, R.layout.gridview_item_detailmenu,new String ItemImage, ItemText , new int R.id.ItemImage, R.id.ItemText );grd.setAdapter
34、(saImageItems);grd.setSelector(new ColorDrawable(Color.TRANSPARENT);grd.setOnItemClickListener(new ItemClickListener();listview1 = (ListView) findViewById(R.id.listview1);listview1.setOnItemClickListener(new OnItemClickListener() Overridepublic void onItemClick(AdapterView parent, View view, int pos
35、ition, long id) intent = new Intent(HomeActivity.this, WebsiteActivity.class);intent.putExtra(url, list.get(position).getUrl();startActivity(intent););listview1.setOnItemLongClickListener(new OnItemLongClickListener() Overridepublic boolean onItemLongClick(AdapterView parent, View view, int position
36、, long id) showContactDialog(position);return true;);,具体的实现效果如图5-6所示:图5-6 浏览器模块界面5.4 浏览界面模块实现用户可以在浏览器软件界面输入网页地址后点击“进入”按钮进入到浏览器浏览界面。进入后软件会根据用户输入的网站来请求相关的网页数据,然后显示在界面上。同时本浏览器也支持搜索功能,当系统检测到用户输入的不是一个网网址而是关键字时,系统会自动调用百度搜索引擎搜索相关结果并显示在界面上,非常智能使用。同时浏览界面的下方包括了后退、前进和刷新等功能按钮,用户可以点击后退按钮后退一个页面,也可以点击刷新按钮重新加载一个页面。
37、同时也可以回到主界面。实现核心代码:private void findview() btnGO = (Button) findViewById(R.id.btnGO);btnGO.setText(浏览);btnGO.setOnClickListener(this);etAddress = (AutoCompleteTextView) findViewById(R.id.etAddress);webView1 = (WebView) findViewById(R.id.webView1);WebSettings webSettings = webView1.getSettings();webSe
38、ttings.setJavaScriptEnabled(true);webSettings.setDefaultFontSize(18);webSettings.setLoadWithOverviewMode(true);webView1.setWebViewClient(new theWebViewClient();webView1.setWebChromeClient(new theWebChromeClient();webView1.setDownloadListener(new MyWebViewDownLoadListener();etAddress.setText(url);ivL
39、eft = (ImageView) findViewById(R.id.ivLeft);ivRight = (ImageView) findViewById(R.id.ivRight);ivHome = (ImageView) findViewById(R.id.ivHome);ivRefresh = (ImageView) findViewById(R.id.ivRefresh);ivLeft.setOnClickListener(this);ivRight.setOnClickListener(this);ivHome.setOnClickListener(this);ivRefresh.
40、setOnClickListener(this);ivRight.setImageResource(R.drawable.right2);具体的实现效果如图5-7所示:图5-7浏览界面5.5 下载模块实现本浏览器内置了文件下载功能,用户在页面上点击一个下载地址的时候浏览器会自动启动下载界面,并通过HTTP协议下载用于请求的文件地址。Webview已经内置了下载,我们只需要实现其DownloadListener接口即可,通过实现该接口监听系统的下载行为,然后在事件触发后跳转进入到我们自己设计的界面完成下载操作。实现核心代码:package com.mm.browserapp.activity;i
41、mport java.io.FileOutputStream;import java.io.InputStream;import java.math.BigDecimal;import .URL;import .URLConnection;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import a
42、ndroid.widget.LinearLayout;import android.widget.ProgressBar;import android.widget.TextView;import com.miebo.utils.BaseActivity;import com.miebo.utils.FileUtils;import com.miebo.utils.HardwareHelper;public class DownloadActivity extends BaseActivity private String filePath;private static final int D
43、OWNLOAD_PREPARE = 0;private static final int DOWNLOAD_WORK = 1;private static final int DOWNLOAD_OK = 2;private static final int DOWNLOAD_ERROR = 3;private static final int DOWNLOAD_CANCEL = 4;private boolean isDownloading = false;private int APKFileSize = 0;private int alreadyDownloadSize = 0;priva
44、te String url;private String fileName;private ProgressBar progressBar1;private BigDecimal bigDecimal;private Button btnCancel;private TextView tvapktotalsize;private TextView tvAlreadyDownloadSize;private LinearLayout ll;Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedIns
45、tanceState);this.setContentView(R.layout.activity_download);url = getIntent().getStringExtra(url);this.findview();this.setListener();this.init();private void findview() TextView tvTopTitleCenter = (TextView) findViewById(R.id.tvTopTitleCenter);tvTopTitleCenter.setText(文件下载);progressBar1 = (ProgressB
46、ar) findViewById(R.gressBar1);tvapktotalsize = (TextView) findViewById(R.id.tvapktotalsize);tvAlreadyDownloadSize = (TextView) findViewById(R.id.tvAlreadyDownloadSize);btnCancel = (Button) findViewById(R.id.btnCancel);ll = (LinearLayout) findViewById(R.id.ll);LinearLayout.LayoutParams lParams = (Lin
47、earLayout.LayoutParams) ll.getLayoutParams();lParams.width = HardwareHelper.getDisplaySize(this)0 - 40;ll.setLayoutParams(lParams);private void setListener() btnCancel.setOnClickListener(new OnClickListener() Overridepublic void onClick(View v) isDownloading = false;finish(););private void init() fi
48、lePath = FileUtils.getSDCardRootPath();fileName = url.substring(url.lastIndexOf(/) + 1);filePath = filePath + fileName;Thread thread = new Thread(new Runnable() Overridepublic void run() downloadFile(url, filePath););thread.start();private final Handler handler = new Handler() Overridepublic void ha
49、ndleMessage(Message msg) switch (msg.what) case DOWNLOAD_PREPARE:alreadyDownloadSize = 0;toastUtil.show(开始下载);bigDecimal = new BigDecimal(APKFileSize * 1.0 / 1024 / 1024);tvapktotalsize.setText(/ + bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).toString() + M);progressBar1.setMax(APKFileSize / 102
50、4);break;case DOWNLOAD_WORK:progressBar1.setProgress(alreadyDownloadSize / 1024);bigDecimal = new BigDecimal(alreadyDownloadSize * 1.0 / 1024 / 1024);tvAlreadyDownloadSize.setText(bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).toString();break;case DOWNLOAD_OK:isDownloading = false;progressBar1.se
51、tProgress(0);tvAlreadyDownloadSize.setText(0);toastUtil.show(已成功下载到SD卡);finish();break;case DOWNLOAD_CANCEL:toastUtil.show(下载被取消);progressBar1.setProgress(0);tvAlreadyDownloadSize.setText(0);break;/* * param what */private void sendMessage(int what) Message m = new Message();m.what = what;handler.se
52、ndMessage(m);/* * * param 文件网络地址 * param SD卡存放位置 */private void downloadFile(String url, String filePaths) try URL u = new URL(url);URLConnection conn = u.openConnection();InputStream is = conn.getInputStream();APKFileSize = conn.getContentLength();/ 文件总大小if (APKFileSize 1 | is = null) sendMessage(D
53、OWNLOAD_ERROR); else / FileUtil.createDirIfNotExist(/sdcard/DGPedometer/);FileOutputStream fos = new FileOutputStream(filePaths);isDownloading = true;sendMessage(DOWNLOAD_PREPARE);byte bytes = new byte1024;int len = -1;while (len = is.read(bytes) != -1) if (!isDownloading) / 下载被取消sendMessage(DOWNLOA
54、D_CANCEL);break;fos.write(bytes, 0, len);fos.flush();alreadyDownloadSize += len;sendMessage(DOWNLOAD_WORK);if (isDownloading) sendMessage(DOWNLOAD_OK);is.close();fos.close(); catch (Exception e) sendMessage(DOWNLOAD_ERROR);e.printStackTrace();Overridepublic void onDestroy() if (isDownloading) isDown
55、loading = false;super.onDestroy();Overridepublic void onClick(View arg0) 具体的实现效果如图5-8所示:图5-8下载界面5.6 浏览历史记录本浏览器内置了浏览历史记录功能,用户在页面上点击一个menu,再点击历史记录,就会出现一个历史记录的列表,这里面的列表记录都是从sqlite数据库用自带的原生查询语句进行查询,在通脱Adapter适配器将查询出来的内容进行显示。实现核心代码:public class HistoryAdapter extends BaseAdapter private List list = null;
56、private final Context context;private LayoutInflater infater = null;public HistoryAdapter(Context context, List list) this.infater = LayoutInflater.from(context);this.list = list;this.context = context;Overridepublic int getCount() return list.size();Overridepublic Object getItem(int position) retur
57、n null;Overridepublic long getItemId(int position) return 0;Overridepublic View getView(final int position, View convertview, ViewGroup parent) ViewHolder holder = null;if (convertview = null) holder = new ViewHolder();convertview = infater.inflate(R.layout.listview_item_common, null);holder.textVie
58、w1 = (TextView) convertview.findViewById(R.id.textView1);holder.textView2 = (TextView) convertview.findViewById(R.id.textView2);holder.textView1.setTextSize(16);holder.textView2.setTextSize(14);convertview.setTag(holder); else holder = (ViewHolder) convertview.getTag();if (list.get(position).getUrl(
59、).length() 30) holder.textView1.setText(list.get(position).getUrl().substring(0, 29) + .); else holder.textView1.setText(list.get(position).getUrl();if (list.get(position).getTitle() != null) if (list.get(position).getTitle().length() 30) holder.textView2.setText(list.get(position).getTitle().substr
60、ing(0, 29) + .); else holder.textView2.setText(list.get(position).getTitle();holder.textView2.setVisibility(View.VISIBLE); else holder.textView2.setVisibility(View.GONE);return convertview;class ViewHolder private TextView textView1;private TextView textView2;6 网页浏览器测试6.1 软件测试软件的测试在软件生命周期中占据重要的地位,在传
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年广州卫生职业技术学院单招职业倾向性考试必刷测试卷必考题
- 2026年合肥职业技术学院单招职业适应性考试题库及答案1套
- 2025福建莆田市国有资产投资集团有限责任公司招聘企业员工网络初审情况笔试历年参考题库附带答案详解
- 2025福建福州聚春园集团有限公司公开招聘5名工作人员笔试历年参考题库附带答案详解
- 2025湖南常德德源资产经营管理有限公司招聘3人笔试历年参考题库附带答案详解
- 2025浙江丽水景宁畲族自治县交通运输局下属企业公共交通有限公司等单位招聘4人笔试历年参考题库附带答案详解
- 2025广东佛山市顺德区均腾实业集团有限公司招聘(风控法务部副部长)笔试历年典型考点题库附带答案详解试卷2套
- 2025山东日照海泽金属科技有限公司招聘81人笔试历年典型考点题库附带答案详解试卷2套
- 复活节兔子服装租赁创新创业项目商业计划书
- 等高线地形图教案(2025-2026学年)
- 2025年税务青年才俊选拔:“强基工程”试题及答案
- 丝网版画技法与艺术解析
- 外呼基础知识培训课件
- 2025江苏连云港市海州区国有企业招聘23人笔试参考题库附带答案详解(10套)
- 2025至2030中国水声调制解调器行业市场深度研究与战略咨询分析报告
- 2024年辽宁教育学院招聘工作人员笔试模拟试题及参考答案详解一套
- 2025年上海工会面试题目及答案
- 2025年党员领导干部廉洁自律知识考试题库及答案
- 冬季模板支撑施工安全管理措施
- 热管辅助散热设计-洞察及研究
- 台球俱乐部福利活动方案
评论
0/150
提交评论