




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
移动平台软件设计7
Service7.1什么是Service7.2Service类型7.3本地服务示例7.1什么是ServiceService是Android系统四大组件之一,它是一种长生命周期的,没有可视化界面,运行于后台的一种服务程序。比如播放音乐的时候,有可能想边听音乐边干些其他事情,当退出播放音乐的应用,如果不用Service,我们就听不到歌了,所以这时候得用到Service。【返回】7.2Service类型(1)本地服务:用于应用程序内部(同一个apk内被调用)服务可以调用startService()启动,调用stopService()结束。在服务内部可以调用Service.stopSelf()或Service.stopSelfResult()来自己停止。无论调用了多少次startService(),都只需调用一次stopService()来停止。Service类型(2)远程服务:用于应用程序之间(被另一个apk调用)定义服务接口并把接口暴露出来,以便其他应用进行操作,比如一个天气预报服务。客户端建立到服务对象的连接,并通过那个连接来调用服务。通过调用bindService()方法建立连接并启动服务,调用unbindService()关闭连接。多个客户端可以绑定至同一个服务。如果服务此时还没有加载,bindService()会先加载它。远程服务提供给可被其他应用复用。Service生命周期【返回】stopService()或stopSelf()7.3本地服务示例--音乐播放服务主要步骤:1.准备工作2.创建MusicService3.主程序4.功能改进1.准备工作在res文件夹下新建raw文件夹将音乐文件import到raw文件夹中备注:res/raw文件夹通常存放资源文件,如音频、视频等资源res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID,即R.raw.某个资源id;【返回】文件名不要出现中文和空格,也不要以全数字命名2.创建MusicService然后命名为MusicServiceMusicService代码框架publicclassMusicServiceextendsService{publicMusicService(){}@OverridepublicIBinderonBind(Intentintent){thrownewUnsupportedOperationException("Notyetimplemented");}}MusicService添加代码publicclassMusicServiceextendsService{
MediaPlayermPlayer;//定义音乐播放器变量@OverridepublicvoidonCreate(){super.onCreate();mPlayer=MediaPlayer.create(getApplicationContext(),R.raw.start);
//创建音乐播放器mPlayer.setLooping(true);//设置可以重复播放
}@OverridepublicvoidonStart(Intentintent,intstartId){super.onStart(intent,startId);
mPlayer.start();}@OverridepublicvoidonDestroy(){super.onDestroy();
mPlayer.stop();}@OverridepublicIBinderonBind(Intentintent){thrownewUnsupportedOperationException("Notyetimplemented");}}【返回】onBind保留,不要删除由startService()触发由stopService()或stopSelf()触发3.主程序(主要代码)Buttonbt1=(Button)findViewById(R.id.button1);Buttonbt2=(Button)findViewById(R.id.button2);View.OnClickListeneronclicklistener=newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){
Intentintent=newIntent(MainActivity.this,MusicService.class);switch(v.getId()){caseR.id.button1:
startService(intent);//启动服务 break;caseR.id.button2:
stopService(intent);//停止服务 break;
}}};bt1.setOnClickListener(onclicklistener);bt2.setOnClickListener(onclicklistener);【返回】显示启动Service4.功能改进增加暂停、重播、结束(停止服务)功能思路:通过在Intent传递参数值给Service假设参数值:1--播放2--暂停3--重播0--结束(服务)-1--退出(结束服务和Activity)主界面activity_main.xml(GridLayout布局)<GridLayoutxmlns:android=""android:layout_width="wrap_content"android:layout_height="fill_parent"android:layout_gravity="center_horizontal"android:columnCount="6"><Buttonandroid:id="@+id/play"android:layout_column="0"android:layout_gravity="left|top"android:layout_row="0"android:text="播放"/><Buttonandroid:id="@+id/pause"android:layout_column="1"android:layout_gravity="left|top"android:layout_row="0"android:text="暂停"/><Buttonandroid:id="@+id/replay"android:layout_column="2"android:layout_gravity="center_horizontal|top"android:layout_row="0"android:text="重播"/><Button
android:id="@+id/stopservice"android:layout_column="3"android:layout_gravity="left|top"android:layout_row="0"android:text="结束"/><Button
android:id="@+id/exit"android:layout_column="5"android:layout_gravity="left|top"android:layout_row="0"android:text="退出"/></GridLayout>MusicService主要代码publicclassMusicServiceextendsService{
//定义音乐播放器变量MediaPlayermPlayer;@OverridepublicvoidonCreate(){super.onCreate();if(mPlayer==null){mPlayer=MediaPlayer.create(getApplicationContext(),R.raw.tick);mPlayer.setLooping(true);}}@OverridepublicvoidonDestroy(){super.onDestroy();if(mPlayer!=null){mPlayer.stop();
mPlayer.release();
}}MusicService代码@OverridepublicvoidonStart(Intentintent,intstartId){super.onStart(intent,startId);if(intent!=null){
Bundlebundle=intent.getExtras();intop=bundle.getInt("op");switch(op){case1:if(!mPlayer.isPlaying()){
mPlayer.start();
}break;case2:if(mPlayer.isPlaying()){
mPlayer.pause();
}break; case3:if(mPlayer!=null){
mPlayer.stop();try{
mPlayer.prepare();}catch(IOExceptionex){ex.printStackTrace();
}
mPlayer.seekTo(0);mPlayer.start();
}break;case0:
stopSelf();break;}}//endswitch}//endif}//endstart播放暂停重播停止服务(服务自己结束服务)在调用stop后如果需要再次通过start进行播放则需要先调用prepare函数(要trycatch)取出BundleMainActivity主要代码Buttonbt1=(Button)findViewById(R.id.play);Buttonbt2=(Button)findViewById(R.id.pause);Buttonbt3=(Button)findViewById(R.id.replay);Buttonbt4=(Button)findViewById(R.id.stopservice);Buttonbt5=(Button)findViewById(R.id.exit);View.OnClickListeneronclicklistener=newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){switch(v.getId()){caseR.id.play:
op=1;break;caseR.id.pause:op=2;break;caseR.id.replay:
op=3;
break;caseR.id.stopservice:op=0;break;caseR.id.exit:op=-1;
break;
}//后面继续假设参数值:1--播放2--暂停3--重播0--结束(服务)-1--退出(结束服务和Activity)MainActivity主要代码
finalIntentintent=newIntent(MainActivity.this,MusicService.class);Bundlebundle=newBundle();if(op!=-1){
bundle.putInt("op",op);intent.putExtras(bundle);
startService(intent);
}else{
//此处添加一个AlertDialog(见后页)}}//endonClick};//listenerbt1.setOnClickListener(onclicklistener);bt2.setOnClickListener(onclicklistener);bt3.setOnClickListener(onclicklistener);bt4.setO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024德州学院辅导员招聘笔试真题
- 2024成都艺术职业大学辅导员招聘笔试真题
- 法律科技系统运维员考试试卷及答案
- 潜水装备检测师笔试试题及答案
- 旅游文创设计师笔试试题及答案
- 锻造车间设备点检员考试试卷及答案
- 2024年杭州拱墅区武林街道招聘真题
- 指向培养学生高阶思维的小学英语学习单设计的案例研究
- 大单元教学:为语文教学添色增香
- 培养学生课堂感受力的实践与探索
- 山东畜牧兽医单招考试题及答案
- 商户安全生产培训课件
- 2025年西安高新区管委会招聘考试试卷
- 四川省广元市2024-2025学年第二学期八年级期末考试数学试卷(无答案)
- 2024-2025学年成都市青羊区七年级下英语期末考试题(含答案)
- 死亡病例讨论制度落实与质控优化
- 2018-2024年中国西瓜行业市场趋势分析及投资潜力研究报告
- DB32∕T 5048-2025 全域土地综合整治项目验收规范
- 2025届河北中考道德与法治真题试卷【含答案】
- 《产科危急重症早期识别中国专家共识(2024年版)》解读课件
- 中医外科一般护理常规
评论
0/150
提交评论