《多功能音乐播放器设计设计.doc》由会员分享,可在线阅读,更多相关《多功能音乐播放器设计设计.doc(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流多功能音乐播放器设计设计.精品文档.毕 业 论 文 设计(论文)题目: Android多功能音乐播放器设计 学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。作者签名: 日期: 年 月 日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文
2、的复印件和电子版,允许论文被查阅和借阅。本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。涉密论文按学校规定处理。作者签名:日期: 年 月 日导师签名: 日期: 年 月 日目 录Android多功能音乐播放器设计III摘 要IIIAbstractIV1 绪论11.1课题开发的背景及意义11.2研究现状12 Android介绍22.1 什么是android?22.2 Android基本框架(Android Architecture)22.3系统的四大组件42.4 Android特性53系统需求分析63.1功能需求63.1
3、.1播放器的基本控制需求63.1.2 播放清单列表管理需求73.1.3 播放友好性需求93.1.4 功能需求(时序图)分析103.2 系统结构图和流程图103.3 系统界面需求123.4系统性能需求133.4.1 如何避免ANR143.4.2增强响应性143.5 运行环境需求154 Android音乐播放器系统设计164.1 音乐播放器界面功能实现164.2 本地音乐及网络音乐播放功能实现204.3 数据存储方式214.3.1 SharedPreferences214.3.2 File存储方式224.3.3 SQLiteDatabase数据库225 系统运行与测试235.1调试工具介绍235.
4、1.1通过Logcat来调试程序:235.1.2通过Traceview来调试程序:235.1.3通过adb来调试程序:235.2 调试中出现的问题及解决方法245.3 编译运行程序255.3.1 编译程序255.3.2 运行程序255.4 系统存在的不足27结论28参考文献29致谢30Android多功能音乐播放器设计摘 要随着Android平台的兴起,移动音乐已成为很多手机用户休闲时的主要爱好之一,因此一款免费的,界面简洁,性能优异的音乐播放器将会得到广大音乐爱好者的支持。本文首先介绍了Android系统的架构和特点,然后在分析需求的基础上,详细论述利用Eclipse开发平台、Android
5、 SDK、Android ADT设计出音乐播放器的具体方法。该播放器支持播放本地及网络音乐、搜索、下载,并且能自动匹配歌词和专辑图片,具有一定实用性。关键词:Android;音乐播放器;下载Android MediaPlayerAbstractWith the rise of the Android platform, mobile music has become one of the main hobby of leisure time a lot of mobile phone users, therefore a free, simple interface,excellent mus
6、ic player will get the support of the majority of music lovers.This paper first introduces the architecture and features of the Android system, and then on the basis of the analysis of demand is discussed in detail using the Eclipse development platform, the Android SDK, Android ADT to design a spec
7、ific method of the music player. The player supports playback of local and online music search, download and can automatically match the lyrics and album art, with a certain practicality.Key words: Android;MediaPlayer;Download1 绪论1.1课题开发的背景及意义近年来,移动通信和互联网成为当今世界发展最快、市场潜力最大、前景最诱人的两大业务,它们的增长速度是任何预测家未曾预
8、料到的。迄今,全球移动用户已超过15亿,互联网用户也已逾7亿。中国移动通信用户总数超过3.6亿,互联网用户总数则超过1亿。目前,移动互联网正逐渐渗透到人们生活、工作的各个领域,短信、下载、移动音乐、手机游戏、视频应用、手机支付、位置服务等丰富多彩的移动互联网应用迅猛发展,正在深刻改变信息时代的社会生活。移动音乐在日常生活中有着非常重要的作用,用手机收听音乐,已经是很多手机用户闲暇时的主要爱好之一,拥有一款功能强大的手机音乐播放器也是很多爱好听音乐的手机用户的追求,因此一款能够提供极佳的音质音效、支持随时随地播放、搜索、下载歌曲,并且能自动匹配歌词和专辑图片的音乐播放器将会得到广大音乐爱好者的支
9、持。1.2研究现状随着移动互联网的发展,近年来智能手机的发展也更加迅速,市场上出现了多种手机操作系统,其中主流的操作系统有Symbian、Windows Phone、Android、ios、黑莓等,其中具有开放源代码优势的Android操作系统有着巨大的发展前景。由于谷歌Android系统开放,因此我们完全能够在手机上拥有一款个性化的音乐播放器。Google的Android系统是一种以Linux为基础的开放源码操作系统,主要使用于便携设备。Android操作系统最初由Andy Rubin开发,最初主要支持手机。2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其
10、他领域上。Android的主要竞争对手是苹果公司的iOS以及RIM的Blackberry OS。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2011年11月数据,Android占据全球智能手机操作系统市场52.5%的份额,中国市场占有率为58%。现如今,就安卓平台而言,很多播放器一味追求外观花哨,功能庞大,对用户的手机资源造成了很多资源浪费,比如CPU,内存等占用率过高,在用户需要多任务操作时,受到了不小的影响,带来了许多不便,而对于大多数普通用户,许多功能用不上,形同虚设。针对以上各种弊端,开发一款功能全面,界面简洁,性能优异的音频播放器软件一定会受到
11、用户欢迎。2 Android介绍2.1 什么是android?Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。Android是基于Linux内核的软件平台和操作系统,早期由Google开发(在华注册商标名为“安致”),后由开放手机联盟(Open Handset Alliance)开发。它采用了软件堆层(software stack,又名以软件叠层)的架构,主要分为三部分。低层以Linux内核工作为基础,只提供基本
12、功能;其他的应用软件则由各公司自行开发,以Java作为编写程序的一部分。2.2 Android基本框架(Android Architecture)图 2.1 Android Architecture1ApplicationsApplication Android会同一个核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是用JAVA编写的。2Application FrameWork 开发者完全可以访问核心应用程序所使用的API框架。该应用程序架构用来简化组件软件的重用;任何一个应用程序都可以发布它的功能块并且任何其
13、它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。该应用程序重用机制使得组建可以被用户替换。所有的应用程序都由一系列的服务和系统组成,包括: 可扩展的视图(Views )可以用来建应用程序,包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons),甚至包括一个可嵌入的web浏览器内容管理器(Content Providers )使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据。资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和分层文件(layout files
14、 )。通知管理器(Notification Manager)使得应用程序可以在状态栏中显示客户通知信息。活动类管理器(Activity Manager)用来管理应用程序生命周期并提供常用的导航回退功能。3Libraries库Android 包括一个被 Android 系统中各种不同组件所使用的 C/C+ 库集。该库通过 Android 应用程序框架为开发者提供服务。以下是一些主要的核心库:系统 C 库一个从 BSD 继承来的标准 C 系统函数库( libc ),专门为基于 embedded linux 的设备定制。 媒体库- 基于 PacketVideo OpenCORE;该库支持录放,并且可
15、以录制许多流行的音频视频格式,还有静态映像文件包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG。 Surface Manager - 对显示子系统的管理,并且为多个应用程序提供2D和3D图层的无缝融合。 LibWebCore - 一个最新的web浏览器引擎用来支持Android浏览器和一个可嵌入的web视图。 SGL - 一个内置的2D图形引擎 3D libraries - 基于OpenGL ES 1.0 APIs实现;该库可以使用硬件3D加速(如果可用)或者使用高度优化的3D软加速。 FreeType - 位图(bitmap)和向量(vector)字体显示。SQ
16、Lite一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。4Android RuntimeAndroid 包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik是针对于同时高效地运行多个VM来实现的。Dalvik虚拟机执行.dex的Dalvik可执行文件,该格式文件针对最小内存使用做了优化。该虚拟机是基于寄存器的,所有的类都经由JAVA汇编器编译,然后通过SDK中的dx工具转化成.dex格式由虚拟机执行。Dalvik虚拟机依赖于linux的一些功能,比如线程机制和底层内
17、存管理机制。5Linux内核Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理,网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件堆栈之间的硬件抽象层。与iPhone相似,Android采用WebKit浏览器引擎,具备触摸屏、高级图形显示和上网功能,用户能够在手机上查看电子邮件、搜索网址和观看视频节目等,比iPhone等其他手机更强调搜索功能,界面更强大,可以说是一种融入全部Web应用的单一平台。2.3系统的四大组件在Android系统中,为我们提供了四大基本组件,每个组件是一个视图,但是有些是可见的,有些是不可见的视图,像Activity,
18、ContentProvider是可见的视图,Service和BroadcastReceiver是不可见的,它们只在系统的后台运行。下面分别介绍四大组件:1Activity 简介在Android系统中Activity提供可视化的用户界面,一个Android应用通常由多个Activity组成。多个Activity组成了Activity栈(Stack),当前活动的Activity处于栈顶。Activity有自己的生命周期,由Android系统来控制。2Service 简介顾名思义Service就是运行在后台的一种服务程序,一般很少和用户交互,因此没有可视化界面定义一个Service类比较简单,只要继
19、承Service类,实现其生命周期中的方法就可以了。一个定义好的Service必须在AndroidManifest.xml配置文件注册,通过元素声明才能使用.Service有自己的生命周期,我们可以调用startService()启动一个Service或者bindService()方法来绑定一个存在的Service 3Broadcast Receiver 简介Broadcast Receiver 顾名思义广播接收器,它和事件处理机制类似,只不过事件处理机制是程序组件级别的(例如,某个按钮的单击事件),而广播事件处理机制是系统级别的。到目前为止我们可以使用Intent来启动一个程序组件,我们还可
20、以通过使用sendBroadcast()方法来发起一个系统级别的事件广播来传递消息。我们可以在你的应用程序中实现Broadcast Receiver来监听和响应这些广播的Intent 4ContentProvider简介Content Provider 用来保存和检索数据,并且使应用程序之间相互访问数据成为可能。它是跨应用程序共享数据的唯一方法。Android 为常用的数据类型(如:音视频、图片和联系方式等)提供了大量的Content Provider。它们被定义在android.provider包下面。通过这样定义好的ContentProvider 我们可以方便的进行数据操作。当然我们必须拥
21、有适当的权限。我们也可以自己来定ContentProvider共享我们的数据,方便用户的访问 2.4 Android特性Android系统有如下的几大特性:应用程序框架 支持组件的重用与替换Dalvik虚拟机 专门为移动设备做了优化内部集成浏览器 该浏览器基于开源的WebKit引擎优化的图形库 包括2D和3D图形库,3D图形库基于OpenGL ESSQLite 用作结构化的数据存储多媒体支持 包括常见的音频、视频和静态印象文件格式(如MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)GSM电话(依赖于硬件)蓝牙Bluetooth, EDGE, 3G, and
22、 WiFi (依赖于硬件)照相机,GPS,指南针,和加速度计 (依赖于硬件)丰富的开发环境 包括设备模拟器,调试工具,内存及性能分析图表,和Eclipse集成开发环境插件3系统需求分析3.1功能需求根据项目的目标,我们可获得项目系统的基本需求,以下从不同角度来描述系统的需求,并且使用例图来描述,系统的功能需求,我们分成四部分来概括,即播放器的基本控制需要,播放列表管理需求,播放器友好性需求和播放器扩展卡需求。以下分别描述:播放暂停停止上一首/下一首音量控制专辑封面显示歌词显示本地歌曲列表网络歌曲列表搜索相关设置用户图3.1 音乐播放器基本控制图3.1.1播放器的基本控制需求表3.1 播放器的基
23、本控制需求表用例名称:播放参与者:用户目标:使得用户可以播放在播放列表中选中的歌曲前置条件:播放器正在运行基本事件流:1.用户单击“播放”按钮 2.播放器将播放列表中的当前的歌曲用例名称:暂停参与者:用户目标:使得用户可以暂停正在播放的歌曲前置条件:歌曲正在播放且未停止和暂停基本事件流:1.用户单击“暂停”按钮 2.播放器将暂停当前的歌曲用例名称:停止参与者:用户目标:使得用户可以停止正在播放的歌曲前置条件:歌曲正在播放或暂停基本事件流:1.用户单击“停止”按钮 2.播放器将停止当前播放的歌曲用例名称:上一首/下一首参与者:用户目标:使得用户可以听上一首或下一首歌曲前置条件:歌曲正在播放或暂停
24、基本事件流:1.用户单击“上一首或下一首”按钮 2.播放器将播放上一首或下一首歌曲用例名称:播放清单参与者:用户目标:使得用户可以进入播放清单前置条件:程序在运行基本事件流:1.用户单击“清单”按钮 2.播放器进入清单列表3.1.2 播放清单列表管理需求 当用户选中列表中某一项歌曲,就有的需求:播放添加至播放列表删除用户图3.2 选中列表中某歌曲时需求图表3.2 播放器的基本控制需求表用例名称:播放参与者:用户目标:使得程序播放选中的歌曲前置条件:程序运行在播放菜单选项中基本事件流:1.用户单击“播放”按钮 2.播放器进入播放状态用例名称:添加至播放列表参与者:用户目标:将歌曲添加到歌曲列表前
25、置条件:程序运行在文件浏览界面基本事件流:1.用户单击“增加”按钮 2.播放器进入手机扩展SD卡用例名称:删除参与者:用户目标:使选中的歌曲被删除前置条件:程序运行在播放菜单选项中基本事件流:1.用户单击“删除”按钮 2.播放器移除选中歌曲3.1.3 播放友好性需求用户播放模式专辑封面单曲循环循环播放歌词显示随机播放图3.3 播放友好需求图表3.3 播放友好需求表用例名称:播放模式参与者:用户目标:使得程序进入播放模式设定状态前置条件:程序运行在播放器设定界面中基本事件流:1.用户单击“顺序、随机、单曲”按钮 2.播放器进入选中模式播放状态用例名称:歌词显示参与者:用户目标:使得程序进入播放器
26、歌词设置状态前置条件:程序运行在播设定界面基本事件流:1.用户单击“歌词开关按钮”按钮 2.播放器显示或关闭歌词3.1.4 功能需求(时序图)分析图3.4 音乐播放器的时序图分析如(图)3.2 系统结构图和流程图1音乐播放器的系统流程图(图3.5)图3.5 音乐播放器系统流程图2系统功能表(表3.4)和系统功能结构图(图3.6)表3.4 播放器功能表功能类别子功能子功能播放列表播放列表菜单退出播放从扩展卡寻找歌曲歌曲菜单播放-进入播放界面删除-数据库同步更新重命名-数据库同步更新向上、下移动-数据库同步更新播放界面播放播放歌曲-线程启动-时间更新暂停暂停歌曲-线程暂停-时间暂停停止停止歌曲-线
27、程停止-时间停止上一首播放列表索引变化-寻找上一ID歌曲下一首播放列表索引变化-寻找下一ID歌曲播放界面菜单返回到播放列表返回到主菜单从扩展卡寻找歌曲退出播放器隐藏播放界面主菜单退出程序程序退出进入播放列表显示播放列表图3.6 系统功能结构图3.3 系统界面需求播放器界面要求布局合理,颜色舒适,控制按钮友好。(图3.7)图3.7 播放器界面3.4系统性能需求即使所写代码能够通过世界上所有的性能测试,此时该应用仍然有可能使用户陷入狂暴状态。例如缺乏响应性、反应慢、某些情况会卡、处理输入的时间非常长的应用就会使用户体验大打折扣。在Android中,系统通过弹出一个“应用无响应(ANR)”对话框给用
28、户,来对抗一段时间没有相应的应用。用户可以在这个对话框中,选择强制关闭还是等待。但是用户不会喜欢在用你的应用的时候总是看到这个对话框。所以,在你的应用中设计响应性是很重要的,系统就不会弹出ANR给用户。一般来说,当应用对用户输入没有相应的时候,系统弹出ANR。例如,如果一个应用阻塞在某些输入输出操作(例如频繁地网络请求),应用的主线程就不会继续响应用户的输入事件。过了一段时间后,系统会认为这个应用已经废了,于是就弹出一个ANR来让用户选择是否强制关闭应用。在这种情况下,建立一个子线程来完成工作是常用的修复手段。这样,主线程(响应UI事件的循环)就会一直运行,系统就不会认为你的代码死了。一般来说
29、,线程是属于类级别,所以,你可以认为响应性是一个类级别的问题。因此根据Android手机系统要求无响应时间为5秒,所以就有如下性能要求:1当要求歌曲播放时,程序响应时间最长不能超过5秒2当要求歌曲暂停时,程序响应时间最长不能超过5秒3当要求歌曲停止时,程序响应时间最长不能超过5秒4当要求歌曲上/下一首时,程序响应时间最长不能超过5秒5当要求进行清单列表时,程序响应时间最长不能超过5秒下面谈谈如何达到性能需求,即如何避免ANR、如何增加响应性:3.4.1 如何避免ANR通过上面给出的ANR的定义,为什么Android应用会无响应,以及如何使你的应用避免这个。一般来说,Android应用会整个运行
30、在一个线程(主线程)里。这意味着,在主线程,任何需要很长时间完成的动作,由于导致了你的应用没机会处理输入事件或者广播的Intent,都会触发ANR对话框。因此,任何在主线程工作的方法,都应该只做最少的事情。 Activity的关键生命周期方法,例如onCreate()和onResume()里,更要做尽可能少的事。潜在的耗时运算,例如网络或数据库操作,或者进行类似缩放位图这样的大量的数学运算,都应该在子线程做。(对于数据库操作,可以通过一个异步方法,而不必放进另一个线程)。这并不意味着你的主线程应该阻塞住等着子线程,无论是通过Thread.wait()还是Thread.sleep()。你的主线程
31、应该提供一个Handler来给子线程结束后返回结果。如此设计的应用,可以让主线程对输入保持小于5秒的响应速度,从而避免ANR对话框。如果其它的线程涉及展示UI,应该遵循同样的实践。对IntentReceiver的执行时间显示,暗示了它应该做的事情,是后台小规模的工作,类似保存设置或者注册Notification一类。所以,跟在主线程的方法一样,应用应该避免在BroadcastReceiver中进行潜在的耗时操作或运算。除了在子线程中处理大量密集任务(因为BroadcastReceiver生命周期是很短的)。当一个潜在的耗时操作需要返回一个广播Intent时,此时应用应该启动一个Service。
32、另外,应该避免从一个IntentReceiver里启动Activity,这将会跳出一个新的界面,并把用户正在做的工作打断。如果应用收到广播Intent之后需要展示给用户什么的话,它应该使用Notification Manager。3.4.2增强响应性一般来说,100到200毫秒是用户感到“卡”的门槛。下面是避免ANR以及加快应用响应额外的方法。如果应用需要等着后台工作的结果(本应用中网络访问较频繁),此时应在前台展示出它的进度。 (可以使用ProgressBar或ProgressDialog)来实现,如果你的应用初始化耗时很长,考虑使用一个SplashScreen或者尽快进入主界面然后再异步地
33、慢慢填充。 在这两种情况,你应该提供给用户一个进度条之类的东西,表明你的应用还没死。3.5 运行环境需求支持环境:Android SDK1.5以上4 Android音乐播放器系统设计4.1 音乐播放器界面功能实现音乐播放器界面用了TableHost组织5个Activity,每个Activity则用了Android 5大布局(LinearLayout(线性布局)、FrameLayout(框架布局)、TableLayout(表格布局)、AbsoluteLayout(绝对位置布局)、RelativeLayout(相对位置布局)跟常用组件结合。下面是5个主要界面的运行效果图。图4.1本地歌曲界面图4.
34、2在线音乐界面图4.3播放界面图4.4搜索界面图4.5更多界面4.2 本地音乐及网络音乐播放功能实现本设计中播放音乐的功能主要是用到了Android SDK中的MediaPlayer类来实现播放音乐的功能。首先要做的是MediaPlayer对象的初始化。由于初始化可以由于种种原因不能成功(如文件无法读取等),需要把它放在try块中,并记录可能出现的异常,根据异常做出相应的处理。MediaPlayer对象在使用前要注意reset,因为它会保存上次的播放状态。Reset之后,就可以用setDataSource来设置多媒体文件的路径了。这个路径既可以是本地的,也可以是远程网络上的。比如将一个http
35、协议下的音乐链接传递给MediaPlayer对旬,它能自动下载缓冲播放远程文件。Prepare方法则是用于播放网络上的音乐。比如在播放远程文件时,使用该方法就会从远程获取数据而不阻塞其它动作。做好这些准备后,就可以调用start方法,如果之前的状态是暂停播放,start方法就会继续播放(除非调用了reset方法),否则,它就会从头开始播放音频文件。为了解决自动连接播放的问题,我们还要监听播放完毕这个事情,就是通过setOnCompletionListener方法设置一个监听器,监听到播放完成后就切换到下一曲继续播放。另外几个控制播放的方法也基本上都是对MediaPlayer对象的控制。在此不在
36、赘述,详细代码请参见附录。4.3 数据存储方式在播放器正常运行时,由于各界面存在相互跳转,为了避免数据在界面跳转的过程中丢失,我们需要将一些数据进行临时存储或者永久存储。保存数据Android作为一种手机操作系统,提供了如下几种存取数据的方式:Preference(配置)、File(文件)、SQLite数据和网络 。另外,在Android中各个应用程序组件之间是相互独立的,彼此的数据不能共享。为了实现数据的共享,Android提供了Content Provider组件来实现应用程序之间数据的共享 4.3.1 SharedPreferencesShearedPreference提供了一种轻量级的
37、数据存取方法,一般数据比较少,一些简单的配置信息。它以“键-值”(是一个Map)对的方式,将数据保存在一个XML配置文件中。android.content.SharedPreferences提供了保存数据的方法android.content .SharedPreferences.Editor提供了获得数据的方法1.xml配置文件的读取我们仍以播放模式读取为例:当需要用到播放模式的确定时,我们将读取.Xml文件,同样用共享文件类SharedPreferences 通过用方法getSharedPreferences(SET_MSG,MODE_WORLD_READABLE),并且是只读方式获得.Xm
38、l的文件内容。SharedPreferences的对象调用方法getString(sigle_Play, null),方法返回一个String类型的值,即是我们以前存储进去的String值。此方法当该标记不存在时会默认返回一个null值。获得成功后我们就可以运用当前的值再对程序进行操作了。2.xml配置文件的存储 类SharedPreferences。它有一个方法getSharedPreferences(参数1,参数2),参数1为写进时的标记,便于在从其中读取出来时的标记,参数2为读取模式,有只写模式(MODE_WORLD_WRITEABLE)和只读模式(MODE_WORLD_READABLE
39、),在写之前将其置入编辑状态,用静态方法SharedPreferences.Editor editor = sp.edit();然后对象editor可以存入一个HashMap类型的键值,即putString(KEY, VALUES),这样,我们可以将List中的对象转化成一样长的字符中放进配置文件中。当写入成功时,android系统会自动在目录data/data/工程包名/shared_prefs/目录下生成一个配置文件4.3.2 File存储方式我们可以将一些数据直接以文件的形式保存在设备中。例如,一些文本文件、PDF文件、音视频文件和图片等。Android提供了文件读写的方法 方法Cont
40、ext.openFileInput() 获得标准Java文件输入流(FileInputStream)方法Context.openFileOutput() 获得标准Java文件输出流(FileOutputStream)Resources.openRawResource (R.raw.myDataFile)方法返回InputStream。4.3.3 SQLiteDatabase数据库SQLite是一个嵌入式数据库引擎,针对内存等资源有限的设备(如手机、PDA、MP3)提供的一种高效的数据库引擎 SQLite数据库不像其它的数据库(如:Oracle),它没有服务器进程。所有的内容包含在同一个单文件中
41、。该文件是跨平台的可以自由拷贝。基于其自身的先天优势,SQLite在嵌入式领域得到了广泛应用。Android系统中使用Sqlite数据库则是使用SQLiteDatabase类实现数据库操作的。/data/data/package/shared_prefs/ Android的三种数据存储方式则让我们可以轻松方便的进行程序编写和数据的访问,更不会让不该消失的数据消失,这对我们进行程序书写有很大我帮助!到这里,基于Android手机平台的音乐播放器功能的介绍基本结束。5 系统运行与测试5.1调试工具介绍5.1.1通过Logcat来调试程序:Dump一份系统消息的日志.这些消息包括模拟器抛出错误时的堆
42、栈跟踪.Android Log是一个记录日志的类,用来将消息写入模拟器上的日志文件中.如果你在DDMS上运行logcat的话你可以就实时查看消息.在你的代码中加入几个写日志方法的调用。为了使用Log类,你只需要调用Log.v()(详细),Log.d()(debug),Log.i()(information),Log.w()(warning) 或者 Log.e()(error),根据你想获得的日志信息来选择相应的方法。在应用程序中需要添加Log.i(MyActivity, MyClass.getView() Requesting item number + position)这段代码,就可以在l
43、ogcat中读取这些信息。5.1.2通过Traceview来调试程序:Android可以保存一个日志用来记录被调用的方法以及该方法被调用的次数,通过Traceview你可以在一个图形化的界面中查看这个日志文件.5.1.3通过adb来调试程序:Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器的状态.发出Android命令: 你可以在你的开发机上的命令行或脚本上发布Android命令,使用方法:adb -d|-e|-s 进入Shell:adb shell查询模拟器/设备实例adb devices 列出模拟器的序列号和状态给特定的模拟器/设备实例发送命令如果有多个
44、模拟器/设备实例在运行,在发布adb命令时需要指定一个目标实例. 这样做,请使用-s 选项的命令.在使用的-s 选项是adb -s 如:db -s emulator-5556 install helloWorld.apk安装软件:adb install 从模拟器/设备中拷入或拷出文件可以使用adbpull ,push 命令将文件复制到一个模拟器/设备实例的数据文件或是从数据文件中复制.install 命令只将一个.apk文件复制到一个特定的位置,与其不同的是,pull 和 push 命令可令你复制任意的目录和文件到一个模拟器/设备实例的任何位置.从模拟器或者设备中复制文件或目录,使用(如下命)
45、:adb pull 将文件或目录复制到模拟器或者设备,使用(如下命令)adb push 在这些命令中, 和 分别指通向自己的发展机(本地)和模拟器/设备实例(远程)上的目标文件/目录的路径下面是一个例子:adb push foo.txt /sdcard/foo.txt查询日志 adb logcatStopping the adb Server在某些情况下,你可能需要终止Android 调试系统的运行,然后再重新启动它. 例如,如果Android 调试系统不响应命令,你可以先终止服务器然后再重启,这样就可能解决这个问题.用kill-server 可以终止adb server.你可以用adb发出s
46、tart-server命令来重新启动服务器.5.2 调试中出现的问题及解决方法本次应用在编码及调试过程中经常出现有:空指针异常(NullPointerException)、类型强制转换异常(ClassCastException)、数组下标越界异常(ArrayIndexOutOfBoundsException)、文件未找到异常(FileNotFoundException)、输入输出异常(IOException)以及一些访问权限等问题。有些比较容易解决,有的解决起来则较难,总之经过不懈努力,终于将这些调试过程中出现的异常解决了,下面说说解决异常的方法:1. java.lang.nullpointerexception这个异常经常遇到