Andr移动终端基础开发 4_第1页
Andr移动终端基础开发 4_第2页
Andr移动终端基础开发 4_第3页
Andr移动终端基础开发 4_第4页
Andr移动终端基础开发 4_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

移动终端应用开发校园易App音乐播放器实现ANDROID目录Contents掌握Service相关知识实现校园易多媒体播放功能模块小结教学目标知识目标掌握AndroidService的概念。理解Service的生命周期。理解Service的两种启动方式的区别。熟悉Android的MediaPlayer类。技能目标能够实现AndroidService应用。素质目标保持积极乐观的心态

。培养个人文化素养

。掌握Service相关知识01PART认识Service1.Service的启动方式Service的启动方式主要有两种,分别是startService()方式和bindService()方式。(1)startService()方式启动Service:被开启的Service通过其他组件调用startService()方法被创建。这种Service可以无限地运行下去,只有调用stopSelf()方法或者其他组件调用stopService()方法后才能停止Service。当Service被停止时,系统会将其销毁。(2)bindService()方式启动Service:被绑定的Service通过其他组件调用bindService()方法被创建。可以通过一个IBinder接口和Service进行通信,通过unbindService()方法关闭这种连接。一个Service可以同时和多个用户绑定,当多个用户都解除绑定之后,系统会销毁Service。认识Service2.Service的生命周期Service的生命周期是从onCreate()方法被调用开始,到onDestroy()方法返回为止。认识Service3.Service的功能(1)执行需要长时间运行的操作。该操作不与用户进行交互,如网络下载、大文件I/O、复杂计算等。(2)应用程序内或应用程序间数据通信。Android的每个应用程序都在自己的虚拟机中运行,一个应用程序是不允许访问其他应用程序的内存信息的,为此Android引入了ContentProvider来在不同应用程序间共享数据。BroadcastReceiver广播信息给不同应用程序,但ContentProvider更多地用于数据的共享,BroadcastReceiver广播的信息会被所有应用程序接收,较耗费系统资源,在两个应用程序间进行动态的交互时需要通过Service来完成。认识Service4.Service的创建(1)创建一个类,继承Service(或它的子类),重写其回调方法onBind()。例如,创建MyService服务类的代码如下。publicclassMyServiceextendsService{@OverridepublicIBinderonBind(Intentintent){returnnull;}}(2)根据需要重写一些方法,通常情况下,会重写onCreate()、onDestroy()和onStartCommand()方法。认识Service5.Service的注册创建好Service类后,需要在AndroidManifest.xml文件中注册该Service。注册Service非常重要,如果开发者不对Service进行注册,则Service根本无法启动。在AndroidManifest.xml文件中注册Service的代码如下。<serviceandroid:name=".MyService"/>属性描述android:description向用户描述Service的字符串android:directBootAware服务是否支持直接启动,即其是否可以在用户解锁设备之前运行。其默认值为falseandroid:enabled系统是否可实例化Service。其默认值为true,表示可以。只有<application>和<service>中的该属性都为true(因为它们都默认使用该值)时,系统才能启用服务android:exported其他应用的组件是否能调用服务或与之交互。如果其值为false,则只有同一个应用或者有相同userID的应用的组件才可以开启或绑定此Service。其默认值取决于Service是否有Intent过滤器。如果Service没有过滤器,则意味着只有指定了Service的准确的类名才能调用,即该Service只能在应用内部使用——其他的应用不知道该应用的类名,这种情况下exported的默认值为false;反之,只要有一个过滤器,就意味着Service考虑到了外界使用的情况,此时exported的默认值为trueandroid:foregroundServiceType阐明服务是满足特定用例要求的前台服务,可以将多个前台服务类型分配给特定服务android:iconService的图标android:isolatedProcess如果设置为true,则该Service将运行在一个从系统中其他部分分离出来的特殊进程中,只能通过ServiceAPI来与其进行通信。其默认值为falseandroid:label可向用户显示的服务名称android:name实现服务的Service子类的名称。此名称应为完全限定类名称(如com.example.project.RoomService)。该属性没有默认值,必须指定其值android:permission声明此服务的权限,意味着只有提供了该权限的应用才能控制或连接此服务android:process运行的进程名称。正常情况下,应用的所有组件都会在为应用创建的默认进程中运行。该名称与应用软件包的名称相同认识Service6.启动ServiceService不能自动运行,需要通过调用Context.startService()或Context.bindService()方法启动。这两个方法都可以启动Service,但是它们的使用场合有所不同。(1)应用组件(如Activity)可通过调用Context的startService()方法并传递Intent对象(指定服务并包含待使用服务的所有数据)来启动Service。(2)使用Context的bindService(Intentservice,ServiceConnectionconn,intflags)方法来启动Service。①service:通过该Intent指定要启动的Service。②conn:ServiceConnection对象,用户监听访问者与Service间的连接情况,若连接成功,则回调该对象的onServiceConnected(ComponentName,Binder)方法。③flags:指定绑定时是否自动创建Service,参数可以是0(不自动创建)或者BIND_AUTO_CREATE(自动创建)。当Service所在的宿主由于异常或者其他原因终止,Service与访问者断开连接时,会调用flags。认识Service7.停止Service(1)对于非绑定服务,必须自身调用stopSelf()方法,或者其他组件调用stopService()方法停止服务。如果不调用任何方法,则服务会一直处于运行状态。(2)对于绑定服务,要想解除与服务的绑定,只需调用unbindService()方法,此时onUnbind()和onDestory()方法将会被调用。启动与停止Service【案例6-1】实现点击“启动服务”按钮时启动服务,点击“停止服务”按钮时停止服务。启动和停止服务界面效果Service的生命周期方法被调用情况实现校园易多媒体播放功能02PART了解MediaPlayerMediaPlayer类是媒体框架中重要的组成部分之一。此类的对象能够获取、解码、播放音频和视频,且只需极少量设置。1.MediaPlayer类(1)MediaPlayer类的媒体来源MediaPlayer类支持多种不同的媒体来源,具体如下。①本地资源:res/raw目录下的资源。②存储设备资源:内部的URI,如可以通过ContentResolver获取的URI。③网络URI:外部URI(流)。(2)MediaPlayer类的方法和事件MediaPlayer类提供了获取/设置播放位置的方法,可以设置是否循环播放。当播放停止后,必须再次准备才能播放。将MediaPlayer类恢复到初始状态时,才能再次设置数据源。释放资源后,MediaPlayer类对象无法再使用。MediaPlayer类还可以设置监听播放完毕、缓冲区变化等事件的监听器。了解MediaPlayer方法描述create(Contextcontext,intresid)创建MediaPlayer对象,使用resid指定的资源作为要播放的音频setDataSource(Stringpath)设置要播放的音频文件位置,参数path为文件路径或URIprepare()准备资源start()开始/恢复播放stop()停止播放,调用后无法再播放pause()暂停播放,可以调用start()方法恢复播放reset()重置到刚刚创建时的状态release()释放相关的资源seekTo(intmsec)从指定位置播放,参数为以毫秒定义的播放位置getCurrentPosition()得到当前播放位置,即播放的毫秒数getDuration()得到音频长度,即总的毫秒数isPlaying()得知当前音频是否正在播放setLooping(booleanlooping)/booleanisLooping()循环播放setVolume(floatleftVolume,floatrightVolume)设置音量MediaPlayer主要方法了解MediaPlayer事件描述setOnPreparedListener(MediaPlayer.OnPreparedListenerlistener)音频源准备好后调用setOnCompletionListener(MediaPlayer.OnCompletionListenerlistener)音频播放完毕后调用setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListenerlistener)网络流缓冲的状态变化时调用setOnSeekCompleteListener(MediaPlayer.OnSeekCompleteListenerlistener)Seek操作完成后调用setOnErrorListener(MediaPlayer.OnErrorListenerlistener)发生错误时调用MediaPlayer类支持的事件了解MediaPlayer(3)MediaPlayer类的使用①获得MediaPlayer对象。可以直接使用new或者调用create()方法创建MediaPlayer对象,方法如下。MediaPlayermp=newMediaPlayer();MediaPlayermp=MediaPlayer.create(this,R.raw.test);//无须再调用setDataSource()方法②设置播放文件。针对MediaPlayer不同的媒体来源,设置播放文件的不同方法如下。MediaPlayer.create(this,R.raw.test); //本地资源mp.setDataSource("/sdcard/test.mp3"); //存储设备资源mp.setDataSource("/music/test.mp3"); //网络URIMediaPlayer类的清单声明在开始使用MediaPlayer类开发应用之前,需要确保AndroidManifest.xml清单具有适当的声明,这样才能使用相关功能。①互联网权限。如果使用MediaPlayer类流式播放基于网络的内容,则应用必须申请此权限。<uses-permissionandroid:name="android.permission.INTERNET"/>②唤醒锁定权限。如果播放器应用需要防止屏幕变暗或处理器进入休眠状态,或者要使用MediaPlayer.setScreenOnWhilePlaying()或MediaPlayer.setWakeMode()方法,则应用必须申请此权限。

<uses-permissionandroid:name="android.permission.WAKE_LOCK"/>MediaPlayer类的播放流程MediaPlayer类用于实现对一个音频的播放控制,包括启动、停止、暂停、位置控制等。乒乓球对打游戏背景音乐【案例6-2】为乒乓球对打游戏添加背景音乐。实现音乐播放器的进度控制音乐播放器的进度控制功能包括播放、暂停、停止、快进、快退,以及显示当前播放进度等。1.进度条与拖动条(1)进度条进度条(ProgressBar)是Android中的一个常用组件,通常用于观察耗时任务的执行情况。例如,对于下载文件、安装软件、加载图片、打开网页等,进度条可以动态地显示它们执行进度的百分比。方形进度条圆形进度条实现音乐播放器的进度控制属性描述style设置进度条的风格。"?android:attr/progressBarStyle"表示圆形进度条;"?android:attr/progressBarStyleSmall"表示缩小版圆形进度条;"?android:attr/progressBarStyleLarge"表示放大版圆形进度条;"?android:attr/progressBarStyleHorizontal"表示方形进度条android:max设置进度条的最大值android:progress设置进度条当前的进度值android:progressDrawable设置自定义的进度条外观图样android:secondaryProgress设置0~max的次要进度值。次要进度在主进度和背景之间。例如,用于网络播放视频时,次要进度表示缓冲进度,主进度表示播放进度ProgressBar在XML界面布局文件中的常用属性实现音乐播放器的进度控制方法描述setProgress()设置进度条当前的进度值setMax()设置进度条的最大值setSecondaryProgress()设置次要进度值setProgressDrawable()设置自定义的进度条外观图样getProgress()获取进度条当前的进度值getMax()获取进度条的最大值getSecondaryProgress()获取次要进度值incrementProgressBy()指定当前进度的增量ProgressBar在Java文件中的常用方法实现音乐播放器的进度控制(2)拖动条拖动条(SeekBar)是进度条的扩展,SeekBar继承于ProgressBar,ProgressBar所支持的XML属性和方法都适用于拖动条。进度条与拖动条的不同如下:进度条不能在界面上直接通过拖动来改变当前进度值,只能在代码中对进度值进行修改;拖动条不仅可以通过代码改变进度值,还可以

温馨提示

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

最新文档

评论

0/150

提交评论