7 毕业论文赵祥来080511012111_第1页
7 毕业论文赵祥来080511012111_第2页
7 毕业论文赵祥来080511012111_第3页
7 毕业论文赵祥来080511012111_第4页
7 毕业论文赵祥来080511012111_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 毕 业 设 计(论 文)设计(论文)题目:基于Android的 MP3播放器设计学生姓名: 赵祥来 指导教师:李莉 讲师二级学院:信息技术学院专业:计算机科学与技术 班级:08计算机科学与技术(1)班学号: 0805110121 提交日期: 2012年4月27日 答辩日期: 2012年5月12 日 目 录摘 要IIAbstractIII1 绪 论11.1 课题背景11.2 Android的介绍11.3 Android开发环境的搭建22 系统的总体设计与分析52.1 总体功能架构52.2 功能流程图53 详细设计与实现63.1 Android程序设计的一般方法73.2 MP3播放器的模块设计7

2、4 测试与总结154.1 Android SDK 16的模拟器的介绍155 结 论17参考文献18附 录19致 谢31基于Android的MP3播放器摘 要由Google倡导发起的发放手机联盟及其推出的Android平台已经发布便在业内引起了轩然大波。本人利用Eclipse和Android SDK开发工具设计出了一款MP3播放器。文章首先介绍了Android技术及其特点,然后介绍Android的开发环境,接着对系统进行了总体分析,在设计出了功能结构图和流程图之后详细阐述了MP3播放器的设计与实现过程,最后测试系统,对播放器的不足进行总结。关键词:Android系统;MP3播放器;结构图;测试B

3、ased on Android MP3 playerAbstractBy Google advocate the release of the release of the league and its mobile phone launch of the Android platform has issued and caused a stir in the industry. I use Eclipse and Android SDK development tool design gave a MP3 player. This article first introduces the A

4、ndroid technology and features, and then introduced the Android development environment, then the system as a whole analysis, in a function structure chart and design flow chart expounds the MP3 player after the design and realization of the process, the last test system, to the deficiency of the pl

5、ayers were summarized in this paper.Keywords: Android system; MP3 player; structure chart; test1 绪 论1.1 课题背景Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源移动终端操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,是首个为移动终端打造的真正开放和完整的移动软件。随着科技的不断发展,手机不再只是人们日常生活的移动通信工具,而是一个多媒体平台,可提供强大的多媒体功能,越来越多的人喜欢用手机听音乐、看电影。Andro

6、id系统内置的音乐播放器基于媒体库对歌曲进行管理,并且支持歌词的同步显示。对于部分用户,操作起来会有所不便。对于Android手机操作系统,可以充分利用它已经习惯的基于文件浏览器形式播放器的丰富的可编程扩展性,开发出新的播放器应用软件。1.2 Android的介绍近年来,Google智能手机平台Android得到了手机行业及客户的普遍认可, 呈爆炸性的趋势发展,为移动运营商、手机制造商、软件开发商及客户提供了无限的发展空间,使市场上不断涌现出大量的基于Android平台的软件和增值服务。(1)Android系统的架构:分层的构架的好处是下层为上层提供统一服务,屏蔽本层及以下层的差异,当本层及以

7、下层发生了变化不会影响到上层。也就是说各层各司其职,各层提供固定的SAP。从架构来看Android分为四层,从低层到高层分别是Linux核心层、系统运行库层、应用程序框架层、和应用程序层。Linux核心层为使用C实现的代码内核(Linux内核+driver),运行于内核空间。系统运行库层(Android运行环境)为使用C/C+ 语言编写的程序库,运行于用户空间。应用程序和应用程序框架层主要是使用Java编写的Java 应用程序,运行于用户层。 (2)Android操作平台的发展:如今已经成为了智能手机行业的支柱平台之一。它不但一举超越了iPhone的市场占有率,还吸引了大量iPhone及其它平

8、台开发者!Android平台拥有多重开发环境,除了智能手机外,开发者还能在采用了Android平台的平板电脑、Google TV、MID及MP4产品上开发应用程序。从而拥有超越其它系统平台的多重环境优势。根据美国移动广告商AdMob的统计,iPhoneOS在美国本土的网络流量占了美国本土全部移动互联网流量的39%,而Android系统首次超越了它,达到了46%。不过要放在世界范围内来看,iPhone OS仍占了46%,而Android只占了25%,还是排第二,不过仍能说明 Android的来势汹汹。 (3)Android系统的“开放”性:任何手机制造商均可无需支付专利费即可将此系统运用在自己的

9、手机 Google的以Linux为内核的Android移动手机平台从诞生之日起短时间内便在世界范围里获得了广泛的关注。最的报告显示在中国,一个拥有最大的人口,拥有最多的手机用户,拥有巨大的增长潜力的国家,这个系统的占有率沿着一个倒抛物线的增长曲率成为手机操作系统中的霸主。开放手机联盟的成立和 Android的推出是对现状的重大改变,在带来初步效益之前,还需要不小的耐心和高昂的投入。但是,我们认为全球移动用户从中能获得的潜在利益是值得付出这些努力的。谷歌将继续努力,让这些服务变得更好,同时也将添加更有吸引力的特性、应用和服务。1.3 Android开发环境的搭建本系统以Android开发工具为平

10、台,搭建过程如下:(1)安装用户可下载程序,然后就解压,按步骤安装就可以使用了。(2)eclipse的安装与配置首先,要安装eclipse 软件必须要有相应的安装程序,用户可下载程序eclipse-java-galileo-win32,然后就解压就可以使用了。Eclipse的配置如下图1.1:图1.1 Eclipse的配置图 (3)在eclipse中配置Android所需插件 A:运行eclipse,点击help选项中的Install new Software,然后导入ADT插件压缩包;B:安装android-sdk-windows,点击window选项里的Perferences,然后选择an

11、droid,导入android-sdk-windows。配置插件图如下:图1.2 配置插件图(4)环境变量的设置右击我的电脑选择属性,在属性栏中选择高级,进行环境变量的设置:A:新建环境变量,变量名JAVA_HOME,变量值B:修改环境变量,变量名Path,变量值%SystemRoot%system32;%SystemRoot%;%SystemRoot%System32Wbem;C:Program FilesATI TechnologiesATI.ACECore-Static;C:ProgramFilesCommon FilesThunder NetworkKanKanCodecs;%JAVA

12、_HOME%bin;%JAVA_HOME%jrebin;C:Program FilesTortoiseSVNbin,环境变量设置如下图1.3:图1.3 环境变量设置图(5)ADT安装ADT实际上是一个工具,它可以连接sdk和Eclipse,帮助Eclipse找到sdk打开Eclipse界面,进入进入菜单中的“Help” “InstallNewSoftware”,点击Add按钮弹出对话框要求输入Name和Location,完成之后,选择Window Preferences;在左边的面板选择Android,然后在右侧点击Browse;并选中SDK路径,本机为;D:YJSHAndroidAndroi

13、dsdkr07windows;点击Apply、OK。配置完成。2 系统的总体设计与分析2.1 总体功能架构本设计根据MP3播放器的功能将系统按照自顶向下的方式进行设计:播放器推出程序播放清单歌词显示音量控制上一首下一首停止暂停播放图2.1 播放器的基本控制需求图2.2 功能流程图 根据MP3播放器的功能设计,制定出的的流程图如下:程序启动播放主界面歌曲目录播放列表文件浏览器选择歌曲播放歌曲下载歌曲退出MP3播放器的设计分成了界面搭建模块,播放模块,下载模块和编码模块,界面有主界面,播放界面,歌曲列表界面,下载界面;播放模块中有许多的按钮,如暂停,下一首,音量调节按钮等;网络下载模块程序中实现网

14、络连接和获取网络数据是通过JamendoGet2Api这个接口中的方法实现的。3 详细设计与实现3.1 Android程序设计的一般方法首先搭建平台,播放器的设计界面可以通过Android的绘图技术实现,然后手动编写每个模块的Java程序,最后调试程序。3.2 MP3播放器的模块设计界面的搭建模块各主要界面运用的是Android的绘图技术。绘制图形通常使用Android.View、View。界面搭建会用到各种控件,如:Button或ImageButton,控件有RadioButton,ToggleButton,和ZoomButton。控件的设置涉及到容器的使用,使用的容器有Android Re

15、lativeLayout容器 、Android LienearLayout容器等,控件布局运用到线性布局、绝对布局、表格布局等。 MP3播放器的主界面如下图3.1: 主界面经过几秒钟过后,就会出现歌曲的列表,如下图3.2:音乐文件播放时的播放界面如下图3.3: 窗口布局文件位于res/layout目录下,我们将在layout目录下创建我们的布局文件。创建布局文件步骤:(1)在左侧栏中的layout文件夹上右键,选择New->File,在弹出的窗口中的File name处填入。单击Finish,即创建了一个空的布局文件。如果对Android布局XML文件的语法非常熟悉,那么可以直接编辑该文

16、件,但是一般情况下,我们还是用ADT工具进行所见即所得的编辑。(2)Android的窗口是由Layout和View组成的,Layout中可以包含View和Layout。我们这个应用的界面排列较简单,因此,最外层的Layout可以采用LinerLayout这种比较简单的格式。要添加它,先点击右侧边栏中Outline选项卡下的绿色“+”按钮,在弹出的窗口中选择LinerLayout,就添加成功了,在Outline窗口中就可以看到刚刚添加的这一项,同时中间的主窗口中也会显示一个空的黑色窗体。另外,我们还可以修改某个Layout或View的属性,方法是在右侧的Outline窗口中选中要修改的窗口元素,

17、在下侧边栏中,切换到Properties选项卡,就可以看到所有的项目属性。大多数的选项都不需要我们手动设置。下面我们继续添加其它的窗口元素。Layout下可以嵌套其它的Layout和View,界面的上部分就是在最外层的LinerLayout下再放置了一个LinerLayout,然后在里层的LinerLayout里放置一排ImageButton。界面的下半部分是一个ListView(或者TextView)。当要在某个Layout里添加元素时,只需要先点击选中该Layout然后再点击"+"图标,就可以添加子元素到其中。 这时我们还需要对各个元素的属性作一些修改。例如对于5个Im

18、ageButton,我们需要设置其Src属性。这个属性表示的是图片的来源。例如back按钮上要显示是的一个指向左边的箭头,这个箭头图标名为,在前述步骤中已经被放在了res/drawable目录中了。我们要把这个图标设为back按钮的图片来源,就需要在Src属性处填入"drawable/back"。"drawable/back"就是引用这个箭头图标资源的ID。 如左图所示,在第一个LinerLayout下面,我们还添加了一个View。这个View中没有显示元素,而只是起一个分隔线的作用,让界面更美观一些。我们把这个View的Layoutheight 属性设

19、为5dip,在显示时,上方的按钮就不会和下方的歌曲列表挤在一起了。在空白View的下方,可以看到,我们分别添加了一个ListView和一个TextView。值得注意的是,这两个元素其实并不会同时显示。这是因为它们的ID分别为"Android:id/list"和"android:id/empty",这种ID属于Android系统的特殊ID,分别表示列表时要显示的和列表中无条目时要显示的元素。这样的话就不需要我们再编写代码来根据列表是否为空来显示相应元素了。最后,我们还可以根据需要,把元素的ID改成便于记忆的名称这样在使用时就更容易记忆。完成所有这些工作后,

20、在Eclipse的主窗口中,就可以看到程序界面的预览效果。网络下载模块程序中实现网络连接和获取网络数据是通过JamendoGet2Api这个接口中的方法实现的,他的实现类是JamendoGet2ApiImpl.这里就从getPopularAlbumsWeek()为例分析如何实现的,其实这个返回的数据就是在HomeActivity中显示的Gallery中的数据。下载界面如下:该播放器的一个特色就是能够实现边播放边下载音乐文件,这样用户就不用每次都要联网才能听歌,实现网络下载功能能的主要程序如下:public int onStartCommand(Intent intent, int flags,

21、 int startId) Mp3Info mp3Info = (Mp3Info)intent.getSerializableExtra("mp3Info");DownloadThread downloadThread = new DownloadThread(mp3Info);Thread thread = new Thread(downloadThread);thread.start();return super.onStartCommand(intent, flags, startId);从Intent对象当中将Mp3Info对象取出,生成一个下载线程,并将Mp3In

22、fo对象作为参数传递到线程对象当中,启动新线程。Overridepublic void run() String mp3Url = "7:8080/mp3/" + mp3Info.getMp3Name();/生成下载文件所用的对象HttpDownloader httpDownloader = new HttpDownloader();Intresult=httpDownloader.downFile(mp3Url,"mp3/", mp3Info.getMp3Name();String resultMessage = nu

23、ll;if(result = -1)resultMessage = "下载失败"else if(result = 0)resultMessage = "文件已经存在,不需要重复下载"else if(result = 1)resultMessage = "文件下载成功"Toast.makeText(DownloadService.this,resultMessage,Toast.LENGTH_SHORT).show()根据MP3文件的名字,生成下载地址,String mp3Url是生成下载文件所用的对象,HttpDownloader h

24、ttpDownloader将文件下载下来,resultMessage表示文件下载成功,并存储到SDCard当中,使用Notification提示客户下载结果。播放模块中在文件中定义一个FrontMusic()和nextMusic()来实现上一曲和下一曲的切换;用mMediaPlayer=new mMediaPlayer()来实现播放列表的更新;setLooping()用来实现是否循环播放等。界面如下:播放模块界面有许多的按钮,如暂停,停止,下一首等,还有歌名的显示,这些功能的实现的主程序如下:public class Mp3Info implements Serializableprivate

25、 static final long serialVersionUID = 1L;private String id;private String mp3Name;private String mp3Size;private String man;首先定义MP3的名字和大小;在播放界面中会显示歌曲的名字和歌唱者的名字;public List<Mp3Info> getMp3Files(String path) List<Mp3Info> mp3Infos = new ArrayList<Mp3Info>();File file = new File(SDCar

26、dRoot );File files = file.listFiles();读取目录中的mp3的名字和大小;private SeekBar audioVolume = null;定义了音量的大小;在界面中用户可以调节音量的大小,如果音量调节为0就会变成静音模式;mNextbtn.setOnClickListener(new ImageButton.OnClickListener() Overridepublic void onClick(View v) NextMusic(); );点击下一首的程序:NextMusic()定义了下一首个歌曲,new ImageButton是下一首的按钮的定义,

27、以下程序是将按钮与下一首相连接。mLastbtn.setOnClickListener(new ImageButton.OnClickListener() Overridepublic void onClick(View v) TODO Auto-generated method stubLastMusic(); ); 点击上一首的程序:跟前面一样,Lastmusic定义上一首歌曲。mPausebtn.setOnClickListener(new ImageButton.OnClickListener() Overridepublic void onClick(View v) TODO Aut

28、o-generated method stubisrun = true;isauto = false;mPausebtn.setVisibility(View.GONE); mStartbtn.setVisibility(View.VISIBLE); / 是否正在播放if (mMediaPlayer.isPlaying() viewlrcKLOK.Stop();mMediaPlayer.pause();进入主界面就会看到很多按钮,mPausebtn.setVisibility(View.GONE) 是隐藏暂停按钮;点击开始按钮就是播放当前的音乐,mStartbtn.setVisibility(

29、View.VISIBLE)是显示启动按钮,点击下一首会播放下一个音乐文件,如果喜欢这首歌,可以选择下载,下载过程会看到进度条的显示,播放结束可以退出程序或选择别的歌曲。(1)编码规范,首先从布局文件说起,布局文件名称的定义必须为小写字母,否者无法生成R类,尽量不要用缩写。以表达清楚该文件用途为本,通常情况下控件ID的定义,ID的定义一律为小写,例如:一用户名 TextView 可以定义为:+ID/username_view 。以“名词_控件名称”这种形式定义。其次是图片的定义格式,图片的定义也是为解释清楚用途为准,参照这种定义格式“”string类的name定义,这里可以按照JAVA中变量的定

30、义方式定义。首字母小写,驼峰命名法。例如:<stringname="userName_view">用户名:</string>最后类名与变量的定义 ,定义与用户交互的类,××Activity.java 。自定义变量一律以小写m开头 例如: EditText mUserName= (2)对上文描述的模块功能进行必要的编码,这里是在Android平台上用JAVA语言实现的。4 测试与分析4.1 Android SDK 16的模拟器的介绍 Android SDK包含一个Eclipse插件,名为ADT(Android Development

31、 Tools,Android开发工具)。这个IDE(Integrated Development Environment,集成开发环境)工具用于开发、调试和测试Java应用程序。也可以单独使用Android SDK,使用命令行工具代替ADT。两种方法都支持使用模拟器来运行、调试和测试应用程序。甚至90%的应用程序开发工作都不需要真实设备。全功能的Android模拟器能够模拟大部分的设备功能。 模拟器不能模拟USB连接、照相机与视频采集、耳机、电池和蓝牙。Android模拟器使用一种名为QEMU的开源"处理器模拟器"技术来完成它的工作,此技术由Fabrice Bellard开

32、发。这项技术还支持在一个操作系统上模拟另一个操作系统,而不用考虑采用了何种处理器。QEMU支持在CPU级别上进行模拟。 在Android模拟器中,处理器基于ARM(Advanced RISC Machine,高级精简指令集机器)架构。ARM是一种基于RISC(Reduced Instruction Set Computer,精减指令集计算机)的32位微处理器架构,其设计上的简单性和较高的速度通过指令集中精减的指令来实现。模拟器在此模拟处理器上运行Linux的Android版本。在Android SDK 16的模拟器上对MP3播放器的各项功能进行调试和测试。调试结束后,将编译生成的安装文件拷贝到

33、SD卡,利用Android文件管理器将播放器软件安装到OMAP3530开发板的系统上,将测试用的音乐文件及对应的歌词文件拷贝到SD卡,0MAP3530开发板上的MP3播放器可以通过文件浏览器选择音乐文件并正常播放。(1)运行程序时,出现如下提示 activity not started, its current task has been brought to the front 原因:这条警告是说,application已经在device上运行,系统不会kill掉他,但是会把他移到前台运行。 解决:可以手动kill process 或者编辑代码重新运行。(2)运行AVD时,console中打

34、印此消息waiting for HOME ('Acess.acore') to be launched原因:这不是一个错误,只要多等一会儿就好了。但是也可以通过右键工程,run as -> Android application来解决。(3)运行AVD时,出现错误failed to install HelloAndroid.apk on device 'emulator-5554!' 原因:在AVD加载的过程中,不要乱点已经出现的模拟器上的图标,要等待AVD完全加载完成。如果过程中出现红色警告,只要重新运行即可。由于时间的限制,本系统已

35、经完成了预期的大部分功能,但还有一些地方有待于进一步的完善:1、 下载功能还不够完善,下载时间太长,还需要改善;2、 界面不够完美。5 结 论在本次毕业设计中,我能按时完成老师布置的课题任务,从对课题的相关资料的整理,然后对Android开发平台的学习,对Android绘图技术的学习,提高了分析和处理问题的本领,学习了论文的写作方法和步骤。 通过本次毕业设计,对Android有了一定的认识,做了几个小应用,用了一些控件,对Android的四大组件Activity,Service,Broadcast,ContentProvider也掌握了很多,以及SQLlite数据库也接触了一些,这样以后再设计

36、有关Android的软件就会得心应手,效率也会高很多。除了学会各个控件的使用外,还学会底层的处理,明白Android系统结构,学会编译系统环境,shell的编写等等。把Android学习好,以后工作也许会用到Android,现在就是一个学习的好机会,努力学好,掌握Android知识。我把这次毕业设计当作是我即将踏入社会前的一次实践,学会并了解了Android,工作也会把学到的利用上,让我的大学之旅画上一个完美的句号。参考文献1 叶核亚.Java程序设计实用教程M.北京:电子工业出版社,2006.2 雍俊海.Java程序设计习题集M.北京:清华大学出版社,2006.3 朱福喜.Java语言习题与

37、解析M.北京:清华大学出版社,2006.4 吴其庆.Java程序设计实例教程M.北京:冶金工业出版社,2006.5 赵文靖.Java程序设计基础与上机指导M.北京:清华大学出版社,2006.JavaM.西安:西安电子科技大学出版社,2006.7 (美)Bruce Eckel. Java编程思想M.陈昊鹏译.北京:机械工业出版社,2007.从程序设计到体系结构M.李仁发等译.北京:电子工业出版社,2007.从系统开发到论文写作M.北京:国防工业出版社,2007.10 (美)威尔顿,麦可匹克.JavaScript入门经典(第3版)M.施宏斌译.北京:清华大学出版社,2009.11 E2ECloud

38、工作室.深入浅出Google AndroidM.北京:人民邮电出版社,2009.08.12 吴亚峰.Android核心技术与实例详解M.北京:电子工业出版社,2010. 13 杨丰盛.Android应用开发揭秘M.北京:机械工业出版社,2010.14 关东升.Android开发案例驱动教程M.北京:机械工业出版社,2011.15 李宁Android开发权威指南M北京:人民邮电出版社,2011附 录关键代码:package android.apps;import java.io.BufferedReader;import java.io.File;import java.io.FileInput

39、Stream;import java.io.FileNotFoundException;import java.io.FilenameFilter;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import android.widget.ImageButton;import android.widget.ImageView;import android.widget.ListView;import android.widget.ScrollView;import an

40、droid.widget.TextView;import android.widget.Toast;public class ActivityMain extends Activity/* Called when the activity is first created. */private ViewlrcKLOK viewlrcKLOK;private MediaPlayer mMediaPlayer = null;private SeekBar mSeekBar = null;/* 定义音量大小 */private SeekBar audioVolume = null;private A

41、udioManager mAudioManager = null;private static final String PATH = "/sdcard/mp3/"class AudioVolumeChangeEvent implements SeekBar.OnSeekBarChangeListener public void onStopTrackingTouch(SeekBar seekBar) Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceSta

42、te);setContentView(R.layout.main);viewlrcKLOK = (ViewlrcKLOK) this.findViewById(R.id.lrc_view);lrc = (TextView) this.findViewById(R.id.lrc);lrc_map = new TreeMap<Integer, lrcObject>();viewlrcKLOK.SetlrcContent("歌词",0,0,".",0);/ 开始按钮mStartbtn.setOnClickListener(new ImageButt

43、on.OnClickListener() Overridepublic void onClick(View v) /lrc.setVisibility(View.GONE); /控件隐藏PlayMusic(PATH + mMusiclist.get(mCurrent); );/ 下一首mNextbtn.setOnClickListener(new ImageButton.OnClickListener() Overridepublic void onClick(View v) / TODO Auto-generated method stubNextMusic(); );/ 上一首mLastb

44、tn.setOnClickListener(new ImageButton.OnClickListener() Overridepublic void onClick(View v) / TODO Auto-generated method stubLastMusic(); );/ 暂停mPausebtn.setOnClickListener(new ImageButton.OnClickListener() Overridepublic void onClick(View v) / TODO Auto-generated method stubisrun = true;isauto = fa

45、lse;mPausebtn.setVisibility(View.GONE);/ 隐藏暂停按钮mStartbtn.setVisibility(View.VISIBLE);/ 显示启动按钮/ 是否正在播放if (mMediaPlayer.isPlaying() viewlrcKLOK.Stop();mMediaPlayer.pause(); );/ 停止mStopbtn.setOnClickListener(new ImageButton.OnClickListener() Overridepublic void onClick(View v) / TODO Auto-generated met

46、hod stubStopMusic(); );/* 得到当前音量对象 */mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);/* 把当前音量值赋给进度条 */audioVolume.setProgress(mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);/* 监听音量 */audioVolume.setOnSeekBarChangeListener(new AudioVolumeChangeEvent();/* 音量监听 */mListView.setO

47、nItemClickListener(new ListView.OnItemClickListener() public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) mCurrent = arg2;StopMusic();PlayMusic(PATH + mMusiclist.get(mCurrent);mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() Overridepublic void

48、onProgressChanged(SeekBar seekBar,int progress, boolean fromUser) if (!isauto) mMediaPlayer.seekTo(progress); Overridepublic void onStartTrackingTouch(SeekBar seekBar) isauto = false; Overridepublic void onStopTrackingTouch(SeekBar seekBar) isauto = true; );this.MusicList(); PendingIntent contentInt

49、ent = PendingIntent.getActivity(this, 0,new Intent(this, ActivityMain.class), 0); notification.setLatestEventInfo(this, title, content, contentIntent); mNotificationManager.notify(NOTIFICATIONS_ID, notification);/播放时发现错误private MediaPlayer.OnErrorListener ErrorListener=new MediaPlayer.OnErrorListene

50、r()Overridepublic boolean onError(MediaPlayer mp, int what, int extra) / TODO Auto-generated method stubmMediaPlayer.stop(); public void PlayMusic(String path) try String lrcpath = path;/装载歌词lrcpath = lrcpath.substring(0,lrcpath.length()-4)+".lrc"this.lrc.setText(read(lrcpath);/改动Toast.mak

51、eText(this,"打开",Toast.LENGTH_SHORT).show();/装载头像String headerFile = path.substring(PATH.length();Log.e("headerFile", headerFile);int pos1 = headerFile.indexOf("-");int pos2 = headerFile.indexOf(".");if (pos2>=0)songName = headerFile.substring(0,pos2);header

52、File = headerFile.substring(0,pos2);Log.e("headerFile pos", headerFile); songAuthor = headerFile.trim(); /headerFile = PATH+"pic/"+headerFile.trim()+".jpg"headerFile = PATH +headerFile.trim()+".jpg"Log.e("headerFile path", headerFile);/改动Toast.makeTe

53、xt(this, headerFile, Toast.LENGTH_SHORT).show();/scrollview.setBackgroundDrawable(Drawable.createFromPath(headerFile);File myFile = new File(headerFile);if (myFile.exists() Bitmap bm = BitmapFactory.decodeFile(headerFile); header.setImageBitmap(bm);private final static int PROGRESS_CHANGED = 0;Overr

54、idepublic void handleMessage(Message msg) switch(msg.what) case VIDEO_READY:break; case PROGRESS_CHANGED: int nowTime = mMediaPlayer.getCurrentPosition();if (nowTime<count)/查找歌词Iterator<Integer> iterator = lrc_map.keySet().iterator();while(iterator.hasNext() Object ob =iterator.next();lrcOb

55、ject val = (lrcObject)lrc_map.get(ob);if (nowTime>val.begintime)lrcObject val_1 = new lrcObject();val_1.begintime = 0;val_1.lrc ="."val_1.timeline = 0;if (iterator.hasNext() Object ob_1 =iterator.next(); val_1 = (lrcObject)lrc_map.get(ob_1); lrc_timeend = val_1.begintime+val_1.timeline;viewlrcKLOK.SetlrcContent(val.lrc,val.timeline,val_1.begintime-val.begintime-val.timeline ,val_1.lrc,val_1.timeline);viewlrcKLOK.invalidate(); /mTextView.setText(String.format("%02d",nowTime);mTextView.setText(String.format("%02d:%02d:%02d", h

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论