收藏 分销(赏)

基于Android的音乐播放器.doc

上传人:pc****0 文档编号:7645712 上传时间:2025-01-11 格式:DOC 页数:29 大小:1.46MB
下载 相关 举报
基于Android的音乐播放器.doc_第1页
第1页 / 共29页
基于Android的音乐播放器.doc_第2页
第2页 / 共29页
基于Android的音乐播放器.doc_第3页
第3页 / 共29页
基于Android的音乐播放器.doc_第4页
第4页 / 共29页
基于Android的音乐播放器.doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、摘 要当今社会发展越来越快,特别是IT方面的。随着硬件移动设备越来越先进,人们对移动设备的要求也越来越高,从以前的追求技术到现在的追求视觉,因此也逐步提高了对系统的要求。本文主要在Android系统上对音乐播放器应用程序的设计与实现进行讨论,通过这一过程来进一步学习Android平台,这样对个人未来发展有很大的意义。本论文的音乐播放器采用了Android开源系统技术,利用Java语言和Eclipse开发工具对播放器代码进行编写。同时给出了详细的系统设计过程、部分界面截图及主要的功能流程图,本文还对开发过程中遇到的问题和解决方法进行了详细的讨论,该音乐播放器集播放、暂停、停止、上一首、下一首、歌

2、词显示等功能于一体,性能良好,在Android系统中能独立运行。对于播放歌曲的文件,本播放器只限于应用层程序的探讨,所以对具体的文件不做深入研究。关键词: Android,Java,Eclipse,音乐播放器目录摘 要2第一章 前言4第二章 系统需求分析52.1功能需求52.1.1 播放器的基本控制需求52.1.2 播放器的设置模块52.1.3 文件浏览器62.2功能需求分析72.3系统流程72.4 系统界面需求82.5系统性能需求92.6 运行环境需求9第三章Android项目介绍103.1什么是Android?103.1.1 Android的介绍103.1.2 Android的特性103.

3、1.3 Android 基本框架113.2 Android应用软件开发的核心技术113.2.1Android应用开发语言113.2.2 Android应用程序组件113.3 Android开发环境的搭配123.4 Android模拟器中sd卡的创建和文件的上传143.4.1 SD卡的创建15第四章音乐播放器的详细设计164.1音乐播放器主界面功能实现164.2 播放列表功能174.3 菜单功能194.3.1菜单界面194.3.2菜单功能实现204.4播放设置界面214.4.1界面实现214.4.2歌词显示实现224.5手机扩展卡的访问244.5.1文件浏览器界面244.5.2 文件浏览器功能实

4、现254.6数据存储方式26第五章 结 论27致 谢28参 考 文 献29第一章 前言现在人们对手机的要求也越来越高,由于手机市场发展迅速,使得手机操作系统也出现了不同的类型,现在市场上主要有3种手机操作系统,即Windows Mobile、Symbian以及谷歌的android操作系统,其中占有开源代码优势的Android系统有最大的发展前景。那么能否在手机上拥有自己编写的个性音乐播放器呢?答案是完全可以!谷歌Android系统就能够做到。本课题就是基于Android的平台的音乐播放器。随着计算机应用的广泛运用,手机市场的迅速发展,各种音频资源也在网上广为流传,这些资源卡是平常,但已经渐渐成

5、为人们生活中必不可少的一部分了。于是各种手机播放器也紧跟着发展起来,但是很多播放器一味最求外观花俏,功能庞大,对用户的手机造成很多资源浪费,比如CPU,内存等的占用率过高,在用户需要多任务操作时,受到不小的影响,带来了许多不便,而对于大多数普通用户,许多功能用不上,形同虚设。针对以上各种弊端,选择了开发多语种的音频播放器,将各种性能优化,继承播放器的常用功能,满足一般用户听歌的需求。现今社会生活紧张,而欣赏音乐史其中最好的舒缓压力的方式之一,本项目的目的是开发一个可以播放主流音乐文件格式的播放器,本设计的实现的这主要功能是播放MP3等音乐文件,并且能够控制播放器播放,暂停,停止,上一曲,下一曲

6、。界面简单,操作简单。本项目是一款基于Android手机 平台的音乐播放器,使Android手机拥有个性的播放器,让手机主人随时随地处于音乐的旋律中。使人们的生活更加多样化。也使设计者更加熟练Android的技术和其它在市场上的特点。第二章 系统需求分析2.1功能需求 2.1.1 播放器的基本控制需求根据项目的目标,我们可获得项目系统的基本需求,一下从不同的角度来描述系统的需求,并且使用用例图来描述,系统的功能需求,我们分成四部分来概括,即播放器的基本控制需要,播放列表管理需求,播放器友好性需求和播放器扩展卡需求。播放暂停上一曲下一曲退出 图2.1 播放器基本控制图 在播放器正在运行时,用户单

7、击“播放”按钮,播放器将播放选中的播放列表中的音乐,并同时显示当前进度;当歌曲未暂停或停止时,用户单击“暂停”按钮,播放器将进入暂停状态;播放器正在播放或暂停时,用户单击“停止”按钮,播放器将停止播放或暂停时,用户点击“上一首”或者“下一首”按钮,播放器将播放上一首或下一首歌曲。2.1.2 播放器的设置模块 设置模块2.1.3 文件浏览器 文件浏览2.2功能需求分析从时序图中可以看出播放器中信息发送和调用过程主界面播放列表播放界面点击进入按钮选择歌曲播放进入播放列表播放后台serviceServic播放页面发送参数,调用后台service播放,返回播放界面 功能结构图2-22.3系统流程 音乐

8、播放器的系统程序如下图所示:主界面是否显示全部音乐播放列表是否点击要播放的歌曲音乐播放程序结束 系统流程图2-32.4 系统界面需求播放器界面要求布局合理,简约,颜色舒适,控制按钮友好,能让用户一眼就能看出各个按钮的作用及操作方法。能实现要求的功能,但又不重复。要考虑到不同手机屏幕大小可能不一样,应尽量兼容大多数手机屏幕尺寸,使之显示无障碍。2.5系统性能需求根据Android手机系统要求无响应时间为5秒,所以就有如下性能要求:1、 当要求歌曲播放时,程序响应时间最长不能超过5秒2、 当要求歌曲暂停时,程序响应时间最长不能超过5秒3、 当要求歌曲停止时,程序响应时间最长不能超过5秒4、 当要求

9、歌曲上/下一首时,程序响应时间最长不能超过5秒5、 界面切换响应时间最长不超过3秒 2.6 运行环境需求操作系统:Windows xp支持环境:Android 2.1版本开发环境:Eclipse 3.5 ADT 0.95第三章Android项目介绍3.1什么是Android? 3.1.1 Android的介绍Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。Android是基于Linux内核的软件平台和操作系统,早

10、期由Google开发(在华注册商标名为“安致”),后由开放手机联盟(Open Handset Alliance)开发。它采用了软件堆层(software stack,又名以软件叠层)的架构,主要分为三部分。低层以Linux内核工作为基础,只提供基本功能;其他的应用软件则由各公司自行开发,以Java作为编写程序的一部分。另外,为了推广此技术,Google和其他几十个手机公司建立开发手机联盟。Android在未公开之前常被传闻为Google电话或gPhone。大多传闻认为Google开发的是自己的手机电话产品,而不是一套软件平台。到了2010年1月,Google开始发表自家品牌手机电话的Nexus

11、 One。3.1.2 Android的特性 Android系统有如下特性1. 应用程序框架 支持组建的重用与替换2. Dalvik 虚拟机 专门为移动设备做了优化3. 内部集成浏览器 该浏览器基于开源的WebKit引擎4. 优化的图形库 包括2D和3D图形库,3D图形库基于OpenGl ES5. SQLite 用作结构化的数据存储6. 多媒体支持 包括常见的音频、视频和静态印象文件格式(如 MPEG4,H.264,MP3,AAC,AMR,JPG,PNG,GIF)7. GSM电话 (依赖于硬件)8. 蓝牙Bluetooth,EDGE,3G,安定WIFI(依赖于硬件)9. 照相机,GPS,指南针,

12、和加速度计(依赖于硬件)10. 丰富的开发环境 包括设备模拟器,调试工具,内存及性能分析图表,和Eclipse集成开发环境插件3.1.3 Android 基本框架 图3.1 Android Architecture(android 软件结构图)3.2 Android应用软件开发的核心技术 3.2.1Android应用开发语言 JAVA是Android上的主流开发语言,各种支持也最完善。Android发布的API和SDK也都主要是面向JAVA开发人员的。我的播放器实例也是用JAVA开发的。 3.2.2 Android应用程序组件Android 应用程序最大的一个特点就是每个应用都由若干组件构成。

13、而且各个应用程序的组件还可以相互调用(需要在代码中设置相应权限)。例如假设我们需要编写一个内嵌于网页的程序,那么我们无需亲自编写浏览器,而是可以直接调用系统自带的Chrome Lite浏览器组件。又如假设我们编写了两个应用程序,其中一个程序中有列表显示图标的组件,那么我们在另一个应用程序中就可以使用该组件,而不需要在编写该功能。也就是说,不同于我们平常编写的程序,Android的应用程序不是单一入口,而是可以从代码的不同位置启动。这就要依靠组件来实现。Android应用程序的组件有以下四种:(1) Activity简介 一个Activity实际上表现出来的就是一个程序的界面。这个界面可能有许多

14、不同的形式,比如有列表形式,有文字形式,有图像格子等形式。一个应用程序也可能有不止一个Activity。比如一耳光短消息的程序,需要有列表显示所有消息的Activity,还至少需要一个编辑短信的Activity,还可能需要设置、菜单等界面。每个Activity都有一个默认的窗口用于绘制界面,一般情况下,它是充满全屏的,但是我们可以通过程序控制它,使其小于屏幕大小,也可以控制其浮动于其他窗口之上(如Android中的Toast信息)。Activity中显示出来的内容其实是由view堆叠形成的,view是由View基类派生出来的各种形式的界面元素,如ListView,GridView等等,通过组合

15、这些view,就形成了一个可见的Activity。我们可以用Activity.setContentView()方法来设置一个Activity中所要显示的view。(2) Service 简介 Service是一种没有界面的组件,同我们平常在Windows或Linux系统中所理解的“服务”一样,Android上的service也是运行在后台的,运行时间可以从系统启动到系统关闭为止。对于许多应用程序来说,service组件式至关重要的。以下载管理器为例,用户肯定希望能够在切换到其他程序时仍然在后台继续下载,这就需要用到service完成下载工作。而显示下载进度、已下载文件等信息则由Activity

16、完成,同时我们还希望控制下载过程,如停止、继续等,这就需要Activity与service之间进行通信。Android允许activity连接到或者绑定到service上,这样就可以让用户在界面上控制后台service的行为。(3) Broadcast Receiver 简介 Broadcast Receiver 顾名思义广播接收器,它和事件处理机制类似,只不过事件处理机制是程序组件级别的(例如,某个按钮的单击事件),而广播事件处理机制是系统级别的。到目前为止我们可以使用Intent来启动一个程序组件,我们还可以通过使用sendBroadcast()方法来发起一个系统级别的事件广播来传递消息。

17、我们可以在你的应用程序中实现Broadcast Receiver来监听和响应这些广播的Intent(4) ContentProvider简介Content provider是一种为其它应用程序提供数据的组件。这些数据可以保存在文件中,也可以保存在SQLite数据库中,还可以以其他任何有效的方式保存。ContentProvider类为我们提供了一系列保存数据的方法供我们调用,可以很方便地存储数据。其它应用程序在需要使用这些数据时,可以用ContentResolver对象,使用其中的方法。ContentResolver可以与任何contentprovider交互,获取其中的数据。3.3 Andro

18、id开发环境的搭配任何事物要运行,都要有它的环境,Android也有它的环境才能够运行,下面介绍Android的开发环境配置.搭建开发环境需要的软件:操作系统:Windows 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 kit安装步骤如下:第一步:安装Java虚

19、拟机sun-java6-jdk版本第二步:安装Eclipse3.5工具 官网http:/www.eclipse.org/downloads/选择版本:进行安装图 3.3 第三步:安装Android SDK:首先要下载SDK,可以在这个网址下载Http:/ ,选择相应的系统进行安装第四步:安装Android ADT插件运行Eclipse,选择help-install new software 选择add,将会弹出一个框图 3.4 点击OK,选择要安装的软件,占next,然后选择接受协议,直到安装成功,重启Eclipse软件,设置Android SDK Home,Window-refrence图

20、3.5 在SDK location中输入SDK Tools路径:D:android softwareandroid-sdk-windows 点击OK这样Android环境就已经搭建成功了。3.4 Android模拟器中sd卡的创建和文件的上传在Android模拟器中,初始时没有sdcard的,为了存放音乐文件,需要自己创建sdcard,我们先来看看如何创建sdcard以及文件上传。3.4.1 SD卡的创建通过Android的Tools来创建sd卡并导入进来1. 打开dos,windows+R键打开。转换到你的sdk安装包的tools目录下,如我的目录如下:E:android-sdk-windo

21、wstools,2. 创建sd卡。在命令行中输入:mksdcard 1024ME:androidsdcardsdcard.img(这个1024M就是我们要创建的SD卡的大小,还是根据自己的需要来输入,最后面的那个E:androidsdcardsdcard.img就是所设置的SD存放路径,这里也可以根据我们自己的需要改变路径的,但要注意路径中不能有空格出现)3. 在Eclipse里面创建模拟器,并以该SD开来创建4. 创建完成之后,启动该模拟器。可以在AndroidSDK and AVD Manager 里面指定模拟器并启动。5. 同样打开Eclipse的DDMS-FileExplorer 查看

22、sd卡是否安装成功。第四章音乐播放器的详细设计4.1音乐播放器主界面功能实现Android的每一个可视化界面,都有其唯一的布局配置文件,该文件里面有各种布局方式,各种资源文件如图像,文字,颜色的引用,程序在运行时,可以通过代码对配置文件进行读取。这样就可以形成不同的可视化界面和绚丽的效果。播放器主界面是一个Activity,Android工程在每个activity启动的时候会首先执行Oncreate()方法,如下代码:OverridePublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState

23、);setContentView(R.layout.play_rack);该方法主要执行界面的初始化操作,Activity有个设置布局的方法:Context.setContentView(layoutResID),参数为资源ID,该Id在工程目录res/layout下,主界面布局文件名为play_rack。下面为play_rack.xml布局文件代码结构如下: 在绝对布局下嵌套两种线性布局和,第一个实现了标题和歌曲名的显示位置,通过布局设置绝对坐标来控制标题的位置。每个布局内可以放置多种Widget(窗体部件)例如:等。每个Widget内有多种属性,可以设置该Widget的坐标,大小,背景和颜

24、色等参数。在播放界面中,歌词显示为居中,实现方法代码如下:属性:orientation=horizontal:此线性布局的子部件为水平方式布局Layout_width=fill_content :布局的宽度为填满父布局Layout_height=wrap_content :布局的高度子由窗体的大小决定 窗体TextView 文本 :textColor=8deeee 设置文本显示的颜色RGB为 8deeeeTextSize为默认大小4.2 播放列表功能 布局层次关系如下: 在Android里面,有一个视图叫ListView,其特点是一个有BaseAdapter的属性,从下到下,或从左到右的显示方

25、式。系统默认的方式每一行只显示一个TextView,本播放列表实现了自定义的方式,刚ListView的每一行显示一个音乐图片和一个歌曲名字。我们定义一个类MusicAdapter 继承了BaseAdapter,然后通过算法对这个适配器进行扩展,扩展成为第一行能显示一张图片和一个歌曲名字。由于BaseAdapter是一个抽象类,我们需要实现里面的抽象方法getView()。该方法返回一个View,即视图。视图可以显示在Activity上,所以就可以看到我们想要的歌曲列表界面。 ListView同样有一个监听器new onItemClickListener()Override public voi

26、d onItemClick(AdapterView arg0, View arg1, int arg2,long arg3) ,我们只要实现这个方法,就可以监听鼠标的点击事件,当鼠标点击到每一行时,可以通过ListView.getItemAtPositon(int position)得到该行上的信息。这样就可以通过Intent将数据传入到其它的Activity。本程序的思路是当鼠标点击一行,会跳转到另一个Activity里面,这个Activity和歌曲列表类似,也是一个ListView,该界面将在下一节介绍。 歌曲列表是从播放主界面跳转过来的,能跳到该歌曲列表是前提是数据有歌曲列表的存在。因为

27、每次歌曲列表显示时会查询数据库中的歌曲列表。如果不存在刚会提示是空列表,选择到SDCard中添加歌曲(4-2-2)中间为一个Dialog对话框,具有Acitivty的属性,但是独立于界面的一个视图,该对话框中放置了一个布局文件。 Dialog的创建:AlertDialog.Builder,AlertDialog alert =builder.create();alert.show(); 该 Dialog上有两个菜单选项,第一个为“从SD卡”,点击会跳转到SDcard界面中。4-2-1 播放列表界面 4-2-2添加歌曲界面4.3 菜单功能菜单界面如图(4-3)4.3.1菜单界面在Menu.Xml

28、配置文件中,布局结构如下:在程序中的Menu.Java中有List容器,该容器可以存放String类型的字符,如下:List seclect_items = new ArrayList();seclect_items.add(播放);seclect_items.add(详细);seclect_items.add(新增);seclect_items.add(移除);seclect_items.add(全部移除);seclect_items.add(设置);然后通过ListView.setAdapter();方法将这些参数设置到界面中去,可以看到与界面显示效果相同!该菜单每一行有一张图片和一个菜单

29、选项(如图4-3-1)图 4-3-1ListAdapter继承一个BaseAdapter,实现里面的getView()方法,再对其进行扩展。 View getView(int position, View convertView, ViewGroup parent) convertView = inflater.inflate(R.layout.file_row, null);holder.text = (TextView) convertView.findViewById(R.id.text);holder.icon = (ImageView) convertView.findViewByI

30、d(R.id.image_Icon);convertView.setTag(holder);ListAdapter每一行都是一个LineaLayout布局,水平放置一个图片一个String。这种算法的实现在前面已经讨论过,这里不再讨论。4.3.2菜单功能实现菜单有6个功能:播放,详细,新增,移除,全部移除,设置。各功能都是通过鼠标点击或触屏触发事件。播放功能:点击后事件触发,传入歌曲名字,让程序操作该名字进行播放。详细功能:点击后事件触发,传入歌曲名字,跳转到下一界面,显示该歌曲的详细信息。新增功能:点击后事件触发,进入到SDCard中,进行歌曲添加选择。移除功能:点击后事件触发。从数据库中删

31、除选中的歌曲。全部移除:点击后事件触发,删除播放列表。设置功能:点击后事件触发,进入到播放设置列表。选择移除菜单选项时,出现(图4-3-2.1)的Dialog、选择全部移除菜单选项时,出现(图4-3-2.2)的Dialog 图 4-3-2.1 图 4-3-2.2删除单首歌曲算法:是对数据库进行单项操作。通过歌曲名字删歌曲,算法如下:del_One(String musicName) ContentResolver cr = getContentResolver();Uri uri = DBProvider.CONTENT_URI;String where = fileName=?;String

32、 selectionArgs = musicName ;cr.delete(uri, where, selectionArgs);选择“是”后,执行代码:Intent intent = new Intent(Menu.this,PlayListActivity.class);startActivity(intent);声明一个Intent,并指明要跳转的界面类,然后启动Intent。 4.4播放设置界面4.4.1界面实现 配置文件setting.Xml布局结构如下: 最外层的LinearLayout里面嵌套多层LineaLayout,子LinearLayout里面嵌套着单选按钮RatioGro

33、up 和开关按钮ToggleButton。RatioGroup 里面嵌套着3个RatioButton,即界面上显示的(单曲循环、随机播放、顺序播放)。如下图所示:图4-4-14.4.2歌词显示实现本播放器以歌词格式.Lrc的文件。我们查看.Lrc文件中的歌词格式为:00:16.18呼吸着 你的香水味即是以“时间+歌词”的格式存储。下面将介绍如何将.Lrc中的歌词读取出来并存储在Android的配文件中(1).xml配置文件的存储 Android系统目录结构如下图:图 4-4-2 我们可以看到一个目录为sdcard ,该目录即为扩展卡,里面预先存放着音频文件和.Lrc歌词文件,我们定义一个Buf

34、feredReader buffer=new BufferedReader(new FileReader(new File(/sdcard/+ musicName + .lrc);指定.Lrc文件存在的路径,并将文件读取到BufferReader中。由于我们要分别存放时间和歌词,所以我们应该定义两个List容器来存放时间和歌词。在读取lrc时,每次读取一行,再用算法将时间和歌词分开后放到一个数组里面,并分别存放在两个list中。由于歌曲在播放时会存在界面之间的跳转,所以歌词必须固定存放在一个文件中,而不能作为一个对象,因此,我们将两个时间List和歌词List再写进一个配置文件中. Andro

35、id提供给我们一个共享文件的类SharedPreferences。它有一个方法getSharedPreferences(参数1,参数2),参数1为写进时的标记,便于在从其中读取出来时的标记,参数2为读取模式,有只写模式(MODE_WORLD_WRITEABLE)和只读模式(MODE_WORLD_READABLE),在写之前将其置入编辑状态,用静态方法SharedPreferences.Editor editor = sp.edit();然后对象editor可以存入一个HashMap类型的键值,即putString(KEY, VALUES),这样,我们可以将List中的对象转化成一样长的字符中放

36、进配置文件中. 当写入成功时,android系统会自动在目录data/data/工程包名/shared_prefs/目录下生成一个配置文件如(图4-4-3)图4-4-3打开播放模式的配置文件.xml,文件中是以map的形式存储。键名, 而它的值是is_Radom。如下图:(2).xml配置文件的读取 我们仍以播放模式读取为例:当需要用到播放模式的确定时,我们将读取.Xml文件,同样用共享文件类SharedPreferences 通过用方法getSharedPreferences(SET_MSG,MODE_WORLD_READABLE),并且是只读方式获得.Xml的文件内容。SharedPref

37、erences的对象调用方法getString(sigle_Play, null),方法返回一个String类型的值,即是我们以前存储进去的String值。此方法当该标记不存在时会默认返回一个null值。获得成功后我们就可以运用当前的值再对程序进行操作了。4.5手机扩展卡的访问程序实现了文件浏览器的功能,作为一个文件浏览器,应该具有浏览的功能,当程序运行到浏览界面时,会有各文件的目录显示及图标标识。从文件浏览器中我们能看到各文件,而且能对其进行操作,本程序是专为播放器添加歌曲而设计的,因此功能仅限于对媒体文件的浏览,和含有媒体文件的目录的浏览。所以功能比较局限。当显示菜单界面时,通过新增选项进

38、入到文件浏览器中,或者当播放列表为空时,会提示进入文件浏览器进行歌曲新增操作。4.5.1文件浏览器界面 图4-5-1 图4-5-2文件浏览器界面布局格式类似上面介绍的菜单,只是在界面的第一行新增了一个返回根目录的功能。由于程序只关系到目录/sdcard的目录下的文件,所以用程序屏蔽了其它的目录,这里只显示两个目录/sdcard和/system。播放器只需要用到媒体文件,所以代码也屏蔽了其它文件的子目录。当选中sdcard会进入到图5.16,该目录下只显示媒体文件,如.Mp3,和sdcard下的子目录。选中system会进入到图5.17,该目录会显示system下的各级子目录。当有媒体文件时才会

39、出现添加Dialog。当要添加选中的歌曲时,程序有自动判断功能,首先弹出Dialog。点击确定按钮后,程序会查询数据库中的歌曲,调用方法query(fileName),根据歌曲名字查询,如果歌曲不存在,则调用方法insertMusic(file),如果该歌曲名字已经存在,则弹出Dialog对话框,当添加成功后,程序会跳转到播放列表中以显示添加结果。4.5.2 文件浏览器功能实现程序中,文件浏览器类为FileExplorerActivity继承了ListActivity,此Activity是一个ListView界面。整个界面是一个ListView布局,而每一行是一个LinearLayout水平方

40、式布局,上面将放置一个图片和一个文件全路径。该文件全路径被存放到数据库中,以便歌曲播放能查询到歌曲路径源该ListView实现了自动判断的功能,即程序可以通过访问扩展卡中的文件属性而自动识别文件属性。如上图所示:当为一个Mp3格式文件时,则前面图标显示mp3图标,当为一个文件目录时,则图标标识为一个文件。文件浏览器是用递归算法实现的,方法fillWithRoot() 是返回根目录的列表。fill(File files)返回子路径列表。算法如下:items = new ArrayList();items.add(getString(R.string.to_top);for (File file : files) if (file.isDirectory() if (file.getPath().indexOf(/sdcard) != -1| (file.getPath().indexOf(/system) != -1)items.add(file.getPath();if (file.getPath().indexOf(.mp3) != -1|(file.getPath().indexOf(.wav))!=-1) items.add(file.getPath();/将文件路径显示在界面中setListAda

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服