Services实现的后台音乐播放器

Android允许我们使用Service组件来完成后台任务,这些任务的允许不会影响到用户其他的交互。
  1. 被startService的
    无论是否有任何活动绑定到该Service,都在后台运行。onCreate(若需要) -> onStart(int id, Bundle args). 多次startService,则onStart调用多次,但不会创建多个Service实例,只需要一次stop。该Service一直后台运行,直到stopService或者自己的stopSelf()或者资源不足由平台结束。

  2. 被bindService的
    调用bindService绑定,连接建立服务一直运行。未被startService只是BindService,则onCreate()执行,onStart(int,Bundle)不被调用;这种情况下绑定被解除,平台就可以清除该Service(连接销毁后,会导致解除,解除后就会销毁)。

  3. 被启动又被绑定
    类似startService的生命周期,onCreate onStart都会调用。

  4. 停止服务时
    stopService时显式onDestroy()。或不再有绑定(没有启动时)时隐式调用。有bind情况下stopService()不起作用。
    实验:
    布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Switch
        android:id="@+id/st_music"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:textOn="@string/play"
        android:textOff="@string/stop"
        android:layout_marginTop="184dp"
        android:text="@string/music_bg" />

</RelativeLayout>

Activity类:

    package demo.camera;  
    import android.app.Activity;  
    import android.content.ComponentName;  
    import android.content.Context;  
    import android.content.Intent;  
    import android.content.ServiceConnection;  
    import android.os.Bundle;  
    import android.os.IBinder;  
    import android.view.View;  
    /** 
     * 演示Activity如何利用Service来完成后台Audio的播放功能 
     * 同时如何将Service和Activity进行绑定 
     * @author Administrator 
     * 
     */  
    public class BackgroundAudioDemo extends Activity {  

        private AudioService audioService;  

        //使用ServiceConnection来监听Service状态的变化  
        private ServiceConnection conn = new ServiceConnection() {  

            @Override  
            public void onServiceDisconnected(ComponentName name) {  
                // TODO Auto-generated method stub  
                audioService = null;  
            }  

            @Override  
            public void onServiceConnected(ComponentName name, IBinder binder) {  
                //这里我们实例化audioService,通过binder来实现  
                audioService = ((AudioService.AudioBinder)binder).getService();  

            }  
        };  

        public void onCreate(Bundle savedInstanceState){  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.back_audio);  
        }  


        public void onClick(View v){  
            int id = v.getId();  
            Intent intent = new Intent();  
            intent.setClass(this, AudioService.class);        
            if(id == R.id.btn_start){  
                //启动Service,然后绑定该Service,这样我们可以在同时销毁该Activity,看看歌曲是否还在播放  
                startService(intent);  
                bindService(intent, conn, Context.BIND_AUTO_CREATE);  
                finish();  
            }else if(id == R.id.btn_end){  
                //结束Service  
                unbindService(conn);  
                stopService(intent);  
                finish();  
            }else if(id == R.id.btn_fun){  
                audioService.haveFun();  
            }  
        }  
    }  

Service类:

    package demo.camera;  
    import android.app.Service;  
    import android.content.Intent;  
    import android.media.MediaPlayer;  
    import android.os.Binder;  
    import android.os.IBinder;  
    import android.widget.MediaController.MediaPlayerControl;  
    /** 
     * 为了可以使得在后台播放音乐,我们需要Service 
     * Service就是用来在后台完成一些不需要和用户交互的动作 
     * @author Administrator 
     * 
     */  
    public class AudioService extends Service implements MediaPlayer.OnCompletionListener{  

        MediaPlayer player;  

        private final IBinder binder = new AudioBinder();  
        @Override  
        public IBinder onBind(Intent arg0) {  
            // TODO Auto-generated method stub  
            return binder;  
        }  
        /** 
         * 当Audio播放完的时候触发该动作 
         */  
        @Override  
        public void onCompletion(MediaPlayer player) {  
            // TODO Auto-generated method stub  
            stopSelf();//结束了,则结束Service  
        }  

        //在这里我们需要实例化MediaPlayer对象  
        public void onCreate(){  
            super.onCreate();  
            //我们从raw文件夹中获取一个应用自带的mp3文件  
            player = MediaPlayer.create(this, R.raw.tt);  
            player.setOnCompletionListener(this);  
        }  

        /** 
         * 该方法在SDK2.0才开始有的,替代原来的onStart方法 
         */  
        public int onStartCommand(Intent intent, int flags, int startId){  
            if(!player.isPlaying()){  
                player.start();  
            }  
            return START_STICKY;  
        }  

        public void onDestroy(){  
            //super.onDestroy();  
            if(player.isPlaying()){  
                player.stop();  
            }  
            player.release();  
        }  

        //为了和Activity交互,我们需要定义一个Binder对象  
        class AudioBinder extends Binder{  

            //返回Service对象  
            AudioService getService(){  
                return AudioService.this;  
            }  
        }  

        //后退播放进度  
        public void haveFun(){  
            if(player.isPlaying() && player.getCurrentPosition()>2500){  
                player.seekTo(player.getCurrentPosition()-2500);  
            }  
        }  
    }  

3、在清单文件AndroidManifest.xml中配置Service

    <service
            android:name=".AudioService" />
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
系统根据B/S,即所谓的电脑浏览器/网络服务器方式,运用Java技术性,挑选MySQL作为后台系统。系统主要包含对客服聊天管理、字典表管理、公告信息管理、金融工具管理、金融工具收藏管理、金融工具银行卡管理、借款管理、理财产品管理、理财产品收藏管理、理财产品银行卡管理、理财银行卡信息管理、银行卡管理、存款管理、银行卡记录管理、取款管理、转账管理、用户管理、员工管理等功能模块。 文中重点介绍了银行管理的专业技术发展背景和发展状况,随后遵照软件传统式研发流程,最先挑选适用思维和语言软件开发平台,依据需求分析报告模块和设计数据库结构,再根据系统功能模块的设计制作系统功能模块图、流程表和E-R图。随后设计架构以及编写代码,并实现系统能模块。最终基本完成系统检测和功能测试。结果显示,该系统能够实现所需要的作用,工作状态没有明显缺陷。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。进入银行卡列表,管理员可以进行查看列表、模糊搜索以及相关维护等操作。用户进入系统可以查看公告和模糊搜索公告信息、也可以进行公告维护操作。理财产品管理页面,管理员可以进行查看列表、模糊搜索以及相关维护等操作。产品类型管理页面,此页面提供给管理员的功能有:新增产品类型,修改产品类型,删除产品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值