Android多媒体学习五:利用Service实现背景音乐的播放
16lz
2021-01-25
Android允许我们使用Service组件来完成后台任务,这些任务的允许不会影响到用户其他的交互。
1、Activity类
[java] view plain copy- packagedemo.camera;
- importandroid.app.Activity;
- importandroid.content.ComponentName;
- importandroid.content.Context;
- importandroid.content.Intent;
- importandroid.content.ServiceConnection;
- importandroid.os.Bundle;
- importandroid.os.IBinder;
- importandroid.view.View;
- /**
- *演示Activity如何利用Service来完成后台Audio的播放功能
- *同时如何将Service和Activity进行绑定
- *@authorAdministrator
- *
- */
- publicclassBackgroundAudioDemoextendsActivity{
- privateAudioServiceaudioService;
- //使用ServiceConnection来监听Service状态的变化
- privateServiceConnectionconn=newServiceConnection(){
- @Override
- publicvoidonServiceDisconnected(ComponentNamename){
- //TODOAuto-generatedmethodstub
- audioService=null;
- }
- @Override
- publicvoidonServiceConnected(ComponentNamename,IBinderbinder){
- //这里我们实例化audioService,通过binder来实现
- audioService=((AudioService.AudioBinder)binder).getService();
- }
- };
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.back_audio);
- }
- publicvoidonClick(Viewv){
- intid=v.getId();
- Intentintent=newIntent();
- intent.setClass(this,AudioService.class);
- if(id==R.id.btn_start){
- //启动Service,然后绑定该Service,这样我们可以在同时销毁该Activity,看看歌曲是否还在播放
- startService(intent);
- bindService(intent,conn,Context.BIND_AUTO_CREATE);
- finish();
- }elseif(id==R.id.btn_end){
- //结束Service
- unbindService(conn);
- stopService(intent);
- finish();
- }elseif(id==R.id.btn_fun){
- audioService.haveFun();
- }
- }
- }
2、Service类
[java] view plain copy- packagedemo.camera;
- importandroid.app.Service;
- importandroid.content.Intent;
- importandroid.media.MediaPlayer;
- importandroid.os.Binder;
- importandroid.os.IBinder;
- importandroid.widget.MediaController.MediaPlayerControl;
- /**
- *为了可以使得在后台播放音乐,我们需要Service
- *Service就是用来在后台完成一些不需要和用户交互的动作
- *@authorAdministrator
- *
- */
- publicclassAudioServiceextendsServiceimplementsMediaPlayer.OnCompletionListener{
- MediaPlayerplayer;
- privatefinalIBinderbinder=newAudioBinder();
- @Override
- publicIBinderonBind(Intentarg0){
- //TODOAuto-generatedmethodstub
- returnbinder;
- }
- /**
- *当Audio播放完的时候触发该动作
- */
- @Override
- publicvoidonCompletion(MediaPlayerplayer){
- //TODOAuto-generatedmethodstub
- stopSelf();//结束了,则结束Service
- }
- //在这里我们需要实例化MediaPlayer对象
- publicvoidonCreate(){
- super.onCreate();
- //我们从raw文件夹中获取一个应用自带的mp3文件
- player=MediaPlayer.create(this,R.raw.tt);
- player.setOnCompletionListener(this);
- }
- /**
- *该方法在SDK2.0才开始有的,替代原来的onStart方法
- */
- publicintonStartCommand(Intentintent,intflags,intstartId){
- if(!player.isPlaying()){
- player.start();
- }
- returnSTART_STICKY;
- }
- publicvoidonDestroy(){
- //super.onDestroy();
- if(player.isPlaying()){
- player.stop();
- }
- player.release();
- }
- //为了和Activity交互,我们需要定义一个Binder对象
- classAudioBinderextendsBinder{
- //返回Service对象
- AudioServicegetService(){
- returnAudioService.this;
- }
- }
- //后退播放进度
- publicvoidhaveFun(){
- if(player.isPlaying()&&player.getCurrentPosition()>2500){
- player.seekTo(player.getCurrentPosition()-2500);
- }
- }
- }
3、在清单文件AndroidManifest.xml中配置Service
<service
android:name=".AudioService" />
转载自:http://blog.csdn.net/chenjie19891104/article/details/6330720
更多相关文章
- 如何在后台运行Linux命令?
- 一款常用的 Squid 日志分析工具
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- android Material主题中的button效果
- Android-AIDL通信
- android:paddingBottom=“@dimen/activity_horizontal_margin"的
- Android解析网页响应xml格式文件的一种方法