版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
移动平台软件设计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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度矿业权抵押担保项目合同样本3篇
- 2024经七路施工项目廉洁保障合同版B版
- 二零二五年度厂房装修安全风险评估合同3篇
- 2025年度高校文印服务外包合同3篇
- 二零二五年度园林景观装修合同范本2篇
- 2024版影视融资中介协议模板版B版
- 简易劳务派遣合同范本
- 二零二五年度icp许可证办理与互联网企业合规性审查与法律支持合同3篇
- 二零二五版二手车按揭转让合同范本3篇
- 二零二五版建筑材料租赁与合同变更合同3篇
- 人教版(2025新版)七年级下册英语:寒假课内预习重点知识默写练习
- 【公开课】同一直线上二力的合成+课件+2024-2025学年+人教版(2024)初中物理八年级下册+
- 高职组全国职业院校技能大赛(婴幼儿照护赛项)备赛试题库(含答案)
- 2024年公安部直属事业单位招聘笔试参考题库附带答案详解
- NB-T 47013.15-2021 承压设备无损检测 第15部分:相控阵超声检测
- SJG 05-2020 基坑支护技术标准-高清现行
- 汽车维修价格表
- 司炉岗位应急处置卡(燃气)参考
- 10KV供配电工程施工组织设计
- 终端拦截攻略
- 药物外渗处理及预防【病房护士安全警示教育培训课件】--ppt课件
评论
0/150
提交评论