基于Android系统的音乐播放器设计与实现.doc_第1页
基于Android系统的音乐播放器设计与实现.doc_第2页
基于Android系统的音乐播放器设计与实现.doc_第3页
基于Android系统的音乐播放器设计与实现.doc_第4页
基于Android系统的音乐播放器设计与实现.doc_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

本科毕业设计(论文)题 目: 基于android系统的音乐播放器设计与实现院 系: 计算机科学系 专 业: 计算机科学与技术 姓 名: 学 号: 指导教师: 教师职称: 填写日期: 2012年 月 日贵阳学院毕业设计(论文)摘 要当今社会的生活节奏越来越快,随着硬件移动设备的越来越先进,人们对移动设备的要求也越来越高,从以前的追求技术到现在的追求视觉效果及用户体验,因此,也逐步的提高了对系统的要求。本文主要是在android系统上对音乐播放器应用程序的设计与实现进行讨论,通过这一过程来进一步学习与应用android平台,这样对个人的未来发展也很有意义。本论文的音乐播放器采用了android开源系统技术,利用java语言和eclipse开发工具对播放器代码进行编写。同时给出了详细的系统设计过程、部分界面截图及主要的功能流程图,本文还对开发过程中遇到的问题和解决方法进行了详细的讨论,该音乐播放器集下载、播放、暂停、停止等功能于一体,性能良好,在android系统中能独立运行。mp3是一种声音文件的压缩格式,由于本播放器只限于应用层程序的探讨,所以对具体的压缩算法不做深究。实验证明,基于android平台的软件开发简单,使用方便简洁,必将成为未来几年的发展方向,具有普遍意义。关键词:android,音乐播放器,mp3abstracttodays increasingly fast pace of life in society, with the hardware of mobile devices become increasingly sophisticated, people demand more and more mobile devices, high technology from the past to the present pursuit of the pursuit of visual and user experience, therefore, also gradually increased the system requirements. this article is in the android system, music player application on the design and implementation to discuss the process through which to further study and application of android, so the future development of personal sense. music player of this paper uses android open-source system technology, the use of java language and eclipse development tools for the preparation of the player code. at the same time gives a detailed system design process, some interface screenshots and the major function of flow, the paper also encountered in the process of development problems and solutions were discussed in detail, the music player, set download,play, pause, stop and other functions, good performance, in the android system can run independently. mp3 is a compressed audio file format, as the player is limited to the application layer of the program, so not to go into the specific compression algorithm. experiments show that, based on the android platform, software development is simple, concise and easy to use, will become the development direction of the next few years, have universal significance. keywords: android, music player, mp3 目 录摘 要iabstractii第一章 引 言11.1 项目背景11.2 编写目的1第二章 android应用软件开发基础32.1 android简介32.2 android应用软件开发的核心技术42.2.1 android 应用开发语言42.2.2 android应用程序组件42.2.3 intent 介绍62.2.4 androidmanifest.xml 文件6第三章 搭建android开发环境83.1 计算机配置83.2 安装jdk83.3 安装eclipse83.4 安装sdk93.5 安装adt93.6 设置eclipse93.7 创建avd10第四章 系统需求分析114.1功能需求分析114.1.1播放器的基本功能114.1.2功能需求时序分析124.2系统结构流程图134.3系统界面需求134.4开发环境14第五章 音乐播放器详细设计与实现155.1播放器界面设计155.2获取并解析xml文件175.3下载mp3文件195.4播放mp3文件21第六章 结 论24致 谢25参考文献26附 录2733第一章 引 言1.1 项目背景自2007年google公司推出android以来,一直受到人们的热捧。android是基于linux内核的软件平台和操作系统,它包括移动电话工作所需的全部软件,而且不存在任何以往羁绊移动产业创新的专有权障碍,并迅速发展成为智能移动终端的操作系统。由于手机市场发展迅速,使得手机操作系统也出现了不同种类,现在的市场上主要有三个手机操作系统,windows mobile,symbian,以及谷歌的android操作系统,其中占有开源代码优势的android系统有最大的发展前景。android的开放性就优于其它封闭式的手机系统,因此,任何人都可以根据自己的爱好将手机系统中的所有功能重新编写。这使得越来越多的人关注这个操作系统。计算机应用越来越广泛,手机市场也日新月异,各种音频、视频资源在网上广为流传,这些资源看似平凡,但是已经成为了人们生活中不可缺少的一部分了,于是各种手机播放器也紧跟着发展起来,但是很多播放器都是一味追求外观花哨,功能庞大,对用户的手机造成了很多资源浪费,在用户需要多任务操作时,受到不少影响,带来了许多不便。 那么能否在手机上拥有自己编写的个性音乐播放器呢?谷歌的android系统就能做到。本文的音乐播放器就是基于谷歌android手机平台的播放器。要研究了各种市场上流行的手机播放器,了解它们各自的插件及编码方式,还有各种播放器播放的特别文件格式,分析各种编码方式的优缺点,以及各种播放器本身的缺点和特点,编写出功能实用,使用方便快捷的播放器。1.2 编写目的现今社会生活紧张,而欣赏音乐是其中最好的舒缓压力的方式之一,本项目的目的是开发一个可以播放mp3文件格式的播放器,并且可以从服务器下载歌曲,控制播放,暂停,停止,音量调节,播放列表和歌曲文件的管理操作等多种播放控制功能,界面简明,操作简单。本项目是一款基于android手机平台的音乐播放器,使android手机拥有个性的多媒体播放器,使手机显得更加生动灵活化,与人们更为接近,让手机主人随时随地处于音乐旋律之中。使人们的生活更加多样化,也使设计者更加熟悉基于android平台的应用布局及开发模式的特点,为以后实现更复杂的应用打好基础。第二章 android应用软件开发基础 2.1 android简介android是一种以linux为基础的开放源码操作系统,主要使用于便携设备。目前尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。android操作系统最初由andy rubin开发,最初主要支持手机。2005年由google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上。android平台五大优势特色:1、开放性2、挣脱运营商的束缚3、丰富的硬件选择4、不受任何限制的开发商5、无缝结合的google应用图2-1 android 软件体系结构图android作为一个移动设备的平台,其软件层次结构包括了一个操作系统(os),中间件(middleware)和应用程序(application)。根据android的软件框图,其软件层次结构自下而上分为以下几个层次:第一、操作系统层(os)第二、各种库(libraries)和android 运行环境(runtime)第三、应用程序框架(application framework)第四、应用程序(application)2.2 android应用软件开发的核心技术2.2.1 android应用开发语言java是android上的主流开发语言,各种支持也最完善。android发布的api和sdk也都主要是面向java开发人员的。我们的播放器实例也是用java开发的。2.2.2 android应用程序组件android应用程序最大的一个特点就是每个应用都由若干组件构成。而且各个应用程序的组件还可以相互调用(需要在代码中设置相应权限)。例如假设我们需要编写一个内嵌有网页的程序,那么我们无需亲自编写浏览器,而是可以直接调用系统自带的chrome lite浏览器组件。又如假设我们编写了两个应用程序,其中一个程序中有列表显示图片的组件,那么我们在另外一个应用程序中就可以使用该组件,而不需要再编写该功能。也就是说,不同于我们平常编写的程序,android的应用程序不是单一入口,而是可以从代码的不同位置启动。这就要依靠组件来实现。android应用程序的组件有以下四种:1. activity一个activity实际上表现出来的就是一个程序的界面。这个界面可能有许多种不同的形式,比如有列表形式,有文字形式,有图像格子等形式。一个应用程序也可能有不止一个activity。比如一个短消息的程序,需要有列表显示所有消息的activity,还至少需要一个编辑短消息的activity(界面),还可能需要设置、菜单等界面。每个activity都有一个默认的窗口用于绘制界面,一般情况下,它是充满全屏的,但是我们可以通过程序控制它,使其小于屏幕大小,也可以控制其浮动于其它窗口之上(如android中的toast信息),activity中显示出来的内容其实是由view堆叠形成的,view是由view基类派生出来的各种形式的界面元素,如listview,gridview等等,通过组合这些view,就形成了一个可见的activity。我们可以用activity.setcontentview()方法来设置一个activity中所要显示的view。2. serviceservice是一种没有界面的组件,同我们平常在windows或linux系统中所理解的“服务”一样,android上的service也是运行在后台的,运行时间可以从系统启动到系统关闭为止。对于许多应用程序来说,service组件是至关重要的。以下载管理器为例,用户肯定希望能够在切换到其它程序时仍然在后台进行下载,这就需要用到service完成下载工作。而显示下载进度、已下载文件等信息则由activity完成,同时我们还希望能控制下载过程,如停止、继续等,这就需要activity与service之间进行通信。 android允许activity连接到或者绑定到service上,这样就可以让用户在界面上控制后台service的行为。3. broadcast receiverbroadcast意为广播消息,android系统自身会发出许多广播消息,如电量不足,用户修改了全局设置等,各个应用程序也以向整个系统广播消息,如文件下载完毕等。broadcast receiver则是程序中专门用来接收广播消息的组件,它没有界面显示,只负责监听、接收广播消息,然后根据程序逻辑,启动其它组件去处理广播消息。它可以启动一个activity来同用户交互,也可以使用notificationmanager向用户发出通知。nitificationmanager的通知形式有许多种,比如说振动、响铃、闪led灯,还可以在android界面的消息栏处显示信息。4. content providercontent provider是一种为其它应用程序提供数据的组件。这些数据可以保存在文件中,也可以保存在sqlite数据库中,还可以以其它任何有效的方式保存。contentprovider类为我们提供了一系列保存数据的方法供我们调用,可以很方便地存储数据。其它应用程序在需要使用这些数据时,可以用contentresolver对象,使用其中的方法。contentresolver可以与任何content provider交互,获取其中的数据。只要需要某个组件,android就会尽力保证它的可用:如果该组件还没启动,就启动它,如果该组件所属的应用程序还没拥有一个进程,则为它启动一个进程,如果系统资源不足以容纳一个新的进程,则将后台的某个进程杀死为新进程腾出资源。2.2.3 intent介绍所谓intent,就是一种运行时的绑定机制在应用程序运行时连接两个不同的组件。一般的应用是通过intent向android系统发出某种请求,然后android系统会根据请求查询各个组件声明的intentfilter,找到需要的组件并运行它。前面介绍的activity、service及broadcastreceiver组件之间的通信全部使用的是intent,但是各个组件使用的intent机制不同。2.2.4 androidmanifest.xml文件androidmanifest.xml是每一个应用都需要的文件, 位于应用根目录下,它 描述了程序包的全局变量, 包括暴露的应用组件(activities, services等等)和为每个组件的实现类, 什么样的数据可以操作,以及在什么地方运行。androidmanifest.xml文件是一个结构化的xml文件,它除了包含有各个组件的信息,还包括许多其它的信息,它的基本样式如下所示: . . . 不难看出,name,icon,lable这些属性就分别指activity的名称、图标、标识。我们通过manifest描述程序的信息,android系统就能读取出来并产生相应的行为。第三章 搭建android开发环境3.1 计算机配置开发android应用所用到的开发工具较占内存,尤其是模拟器。官方并未给出最低配置要求,根据个人实际体会,在本人intel core i7-2630qm 四核处理器及8g内存的情况,能流畅使用。另外还需有600mb以上的剩余磁盘空间(官方文档中的说明)。3.2 安装jdk由于android开发是基于java的基础上的,所以我们必须得安装jdk(jdk下载地址:/technetwork/java/javase/downloads/index.html)。安装过程中应对系统的环境变量做出相应的设置:1. 右击计算机-属性-高级系统设置-高级-环境变量,新建“系统变量”,设置变量名:“java_home”。变量值: “c:program filesjavajdk1.7.0_02”(视个人安装路径而定)。2. 找到变量名为path的项,双击,在变量值后面添加:“;%java_home%bin;”,3. 新建“系统变量”变量名:“classpath”,变量值:“.;%java_home%libdt.jar;%java_home%libtools.jar;” 配置完成后,重启可以在cmd下输入java或者javac测试。3.3 安装eclipseeclipse是我们以后在android开发时使用的开发平台,它集成了很多功能以及插件,在开发的过程中便于我们使用,在官网(/downloads/)可以下载到对应系统以及功能的安装包,在安装提示安装完成后并且完成了jdk的安装后即可正常使用。3.4 安装sdksdk(software development kit)初始包中有开发android程序所要用到的工具,它包括了从编译到运行android应用程序所需要的各种工具。安装时可以根据自己的需求选择安装相应的版本。(sdk下载地址:/sdk/index.html)3.5 安装adt按照2.3.4安装完sdk初始包后,就可以开始开发android应用程序了,但是为了更高效地进行开发,android团队推出了android development tools (adt) 。adt是目前开发android应用最有效的工具,它是一个eclipse插件,支持eclipse 3.4及3.4以上的版本。以eclipse 3.5 (galileo)为例,安装过程如下:1. 打开eclipse,选择 help install new softare。2. 在available software 对话框中,点击add.。3. 在弹出的add site 对话框中,任意填写一个名字到name一栏。在location一栏,则填入这一url:“/android/eclipse/”,然后确认返回。(注意:如果在后续的步骤中发现无法安装插件,可以试着把url中的https换成http。)4. 返回到available software 窗口后,就能看到列表中出现了developer tools ,选中它前面的复选框,再点击“next”,就会开始下载安装adt的各种组件了。5. 安装完毕后将弹出窗口显示adt相关的各种信息以及许可协议,点击“finish“即可完成安装。6. 重新启动eclipse。3.6 设置eclipse1. 选择window preferences. 打开偏好设置2. 从左侧边栏中选择android一栏。3. 单击sdk location一栏边的browse按钮,选择刚刚下载的sdk保存的路径。4. 点击apply,ok,设置生效。至此,android的开发环境就已经搭建完毕,可以使用了 。3.7 创建avd在安装好jdk,eclipse,sdk,adk之后我们就可以进行android项目开发了,但是在开发的过程中我们经常需要运行、调试我们所开发的软件,这就需要用到avd(android virtual device),也就是android虚拟机。1. 打开eclipse。2. 点击opens the android virtual device manager图标按钮。3. 在弹出的窗口中点击new新建一个android虚拟机。4. 在弹出的新建虚拟机窗口中name一栏填上虚拟机的名称(一般与虚拟机的版本号相同,便于区分)。5. 在target一栏选择一个android虚拟机版本(如android2.2或android2.1)。6. 在sd card下的size一栏填上我们要设定的sd卡容量大小。7. 点击create avd,这样我们的一个android虚拟机就创建好了。第四章 系统需求分析4.1功能需求分析根据项目的目标,我们可获得项目系统的基本需求,一下从不同角度来描述系统的需求,并且使用用例图来描述,系统的功能需求,播放器的基本控制需求。以下分别描述:4.1.1播放器的基本功能音乐播放器的基本功能下载歌曲播放暂停停止音量控制歌曲列表播放文件退出图4-1 播放器基本控制图在播放器运行时,主界面是服务器的歌曲列表,可以点击刷新列表,也可以点击歌曲名,开始下载歌曲,然后点击本地歌曲列表可以显示出本地的歌曲文件,点击文件名则跳转到播放界面,在播放界面可以控制歌曲的播放、暂停、停止以及返回本地歌曲列表。4.1.2功能需求时序分析图4-2 音乐播放器的时序图从以上时序图可以看到播放器中消息发送及调用过程。4.2系统结构流程图图4-3 音乐播放器系统流程图以上显示了播放器的各个流程。4.3系统界面需求播放器界面要求布局合理,简约,颜色舒适,控制按钮友好,能让用户一眼就能看出各个按钮的作用及操作方法。能实现要求的功能,但又不重复。要考虑到不同手机屏幕大小可能不一样,应尽量兼容大多数手机屏幕尺寸,使之显示无障碍。4.4开发环境操作系统:windows7 x64。开发环境:eclipse version: indigo service release 1 adt version: 16.0.1运行环境:android 2.2第五章 音乐播放器详细设计与实现5.1播放器界面设计首先是创建一个主界面mainactivity,它使用tabhost布局,这里面的tabwidget控件控制着两个activity的互相切换:一个是mp3playerlistactivity(图5-1),这个activity是一打开程序就显示的服务器歌曲列表。图5-1 mp3playerlistactivity另一个是localactivity(图5-2),这个activity是点击tabwidget控件中的“本地”按钮才会显示的本地歌曲列表界面。图5-2 localactivity在localactivity中点击列表中的歌曲名就会调出playeractivity(图5-3),这个activity就是播放音乐时的界面,其中有一些对播放器进行控制的控件。图5-3 playeractivity详细设计代码见附录。5.2获取并解析xml文件因为打开播放器首先就要刷新服务器上的歌曲列表,那么我们就得获取服务器上的歌曲列表文件,即xml文件。实现代码如下:/ 根据url下载文本文件,必须是文本文件,因为返回值是文本中的字符public string download(string urlstr) stringbuilder sb = new stringbuilder();string line = null;bufferedreader buffer = null;try / 创建一个url对象url url = new url(urlstr);/ 创建一个http连接httpurlconnection urlconn = (httpurlconnection) url.openconnection();/ 使用io读取数据buffer = new bufferedreader(new inputstreamreader(urlconn.getinputstream();/ 一行行的读取数据while (line = buffer.readline() != null) sb.append(line); catch (exception e) e.printstacktrace(); finally / 关闭buffer 节约资源try buffer.close(); catch (exception e2) e2.printstacktrace();/将读取到的文本文件中的内容传回去return sb.tostring();从服务器上下载到xml中的文本后就要开始解析,在开始解析之前我们先来了解一下服务器上用来保存歌曲信息的xml文件。图5-2 xml文件结构图从上图中可以看出所有的歌曲信息是包含在一个resources标签当中的,而每一个resource标签就代表一首歌曲,其中的id、、、lrc.size标签都分表代表了歌曲的一条信息。在我所设计的播放器中所用到是实现sax(simple api for xml)接口的方式来解析xml文件,解析的实现代码如下:/开始解析xml文件中的每一个标签时调用的方法overridepublic void startelement(string uri, string localname, string qname,attributes attr) throws saxexception /将从xml文件中读取到的标签名赋值给tagnametagname = localname;/如果标签名为resource时 就创建一个mp3info的实例对象if (tagname.equals(resource) mp3info = new mp3info();/解析完xml文件中的每一个标签时调用的方法overridepublic void endelement(string uri, string localname, string qname)throws saxexception /每次读取到resource标签就代表一首歌曲的信息已经完成,并将次mp3info加到infos当中if (qname.equals(resource) infos.add(mp3info);/每读完一个标签就清空tagname,以免出错tagname = ;/读取xml文件中没一个标签中内容overridepublic void characters(char ch, int start, int length)throws saxexception /将读取到的内容赋值给tempstring temp = new string(ch, start, length);/将每个标签中的内容赋值给mp3info实例对象中相应的变量if (tagname.equals(id) mp3info.setid(temp); else if (tagname.equals() mp3info.setmp3name(temp); else if (tagname.equals(mp3.size) mp3info.setmp3size(temp); else if (tagname.equals() mp3info.setlrcname(temp); else if (tagname.equals(lrc.size) mp3info.setlrcsize(temp);5.3下载mp3文件根据url的地址从服务器上下载文件,因为下载不可能是一瞬间就能完成的事,如果我们在主线程中进行下载,那么下载过程中程序就会出现假死状态,因为它在等待文件下载完成,下载完成才能执行后面的操作,所以我们需要用一个线程来进行下载任务,实现代码如下:/ 每次用户点击listactivity当中的一个条目时,就会调用该方法overridepublic int onstartcommand(intent intent, int flags, int startid) / 从intent对象当中将mp3info对象取出mp3info mp3info = (mp3info) intent.getserializableextra(mp3info);/ 生成一个下载线程,并将mp3info对象作为参数传递到线程对象当中downloadthread downloadthread = new downloadthread(mp3info);/ 启动新线程thread thread = new thread(downloadthread);thread.start();return super.onstartcommand(intent, flags, startid);class downloadthread implements runnable private mp3info mp3info = null;public downloadthread(mp3info mp3info) this.mp3info = mp3info;public void run() / 根据mp3文件的名字生成下载地址string mp3url = 47:8080/mp3/+ mp3info.getmp3name();/ 生成下载对象所用的对象httpdownloader httpdownloader = new httpdownloader();/ 将文件下载下来 并存储到sdcard中int result = httpdownloader.downfile(mp3url, mp3/,mp3info.getmp3name();string resultmessage = null;if (result = -1) resultmessage = 下载失败;/toast.maketext(getapplicationcontext(), resultmessage, toast.length_short).show();system.out.println(resultmessage); else if (result = 1) resultmessage = 文件已存在;system.out.println(resultmessage);/toast.maketext(this, resultmessage, toast.length_short).show(); else if (result = 0) resultmessage = 下载成功;system.out.println(resultmessage);5.4播放mp3文件下载到mp3文件后当我们点击播放列表中的歌曲名时就应该从sdcard中读取到我们所下载的文件,并且调出播放界面进行播放。读取mp3文件的路径,实现代码如下:/获取mp3文件的路径private string getmp3path(mp3info mp3info) /先获得sdcard路径string sdcardroot = environment.getexternalstoragedirectory().getabsolutepath();/sdcard路径下的mp3文件夹下根据mp3info中的mp3name获取mp3文件名,并返回完整文件路径pathstring path = sdcardroot + file.separator + mp3 + file.separator+ mp3info.getmp3name();return path;得到路径后就调用java中的媒体播放器开始播放音乐,并对音乐播放的过程进行暂停,停止等控制,而音量控制是android系统中自带得有的,所以不需要再编写,具体实现代码如下:/窗口创建时的一些设置,以及接收intent对象中传过来的信息overrideprotected void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate);setcontentview(r.layout.player);intent intent = getintent();mp3info = (mp3info) intent.getserializableextra(mp3info);beginbutton = (imagebutton) findviewbyid(r.id.begin);pausebutton = (imagebutton) findviewbyid(r.id.pause);stopbutton = (imagebutton) findviewbyid(r.id.stop);textview = (textview) findviewbyid(r.text);textview.settext(正在播放: + mp3info.getmp3name();beginbutton.setonclicklistener(new beginbuttonlistener();pausebutton.setonclicklistener(new pausebuttonlistener();stopbutton.setonclicklistener(new stopbuttonlistener();/ 开始播放的监听器class beginbuttonlistener implements onclicklistener public void onclick(view v) /判断是否正在播放,正在播放状态则不做任何操作,没播放扎un柜台则开始播放if (!isplaying) string path = getmp3path(mp3info);mediaplayer = mediaplayer.create(playeractivity.this,uri.parse(file:/ + path);mediaplayer.setlooping(false);mediaplayer.start();isplaying = true;isreleased = false;/ 暂停监听器class pausebuttonlistener implements onclicklistener public void onclick(view v) /判断媒体播放器中是否为空,是否处于停止或暂停状态,若是暂停,再次点下则为播放,若是播放则相反if (mediaplayer != null) if (!isreleased) if (!ispause) mediaplayer.pause();ispause = true; else mediaplayer.start();ispause = false;/ 停止播放监听器class stopbuttonlistener implements onclicklistener public void onclick(view v) /不处于停止状态时就进入停止状态if (!isreleased) isreleased = true;mediaplayer.stop();mediaplayer.release();isplaying = false;以上就是整个android音乐播放器设计中比较重要的功能以及实现方法。第六章 结 论1. 通过对android手机平台的音乐播放器的开发,使我对android系统从零进入到了一个比较高的层次的了解,android功能是如此强大,令人不得不佩服。这一个月的学习与实践,其间遇到许多难题,困扰了我好久,不过最终都被我攻克了,我觉得学习新东西就是要不断摸索,边学边练,学习其原理,这样才能走的更远。2. 在最初设计的界面的时候,总是不如意,纠结了好久,后来在网上找了许多资料,最后才决定了在主界面使用tabhost这种布局来进行服务器列表与本地列表的切换。3. 播放列表中显示歌曲信息,

温馨提示

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

评论

0/150

提交评论