• Activity与Service之间交互并播放歌曲的实现代码


    Activity与Service之间交互并播放歌曲,为了方便,我把要播放的歌曲定死了,大家可以灵活改进
     



    MService:

    复制代码代码如下:

    package com.tiantian.test;
    import android.app.Service;
    import android.content.Intent;
    import android.media.MediaPlayer;
    import android.os.Binder;
    import android.os.Environment;
    import android.os.IBinder;
    import android.util.Log;
    public class MService extends Service{
        MyBinder myBinder = new MyBinder();
        private MediaPlayer mediaPlayer;

        public class MyBinder extends Binder{
            MService getService(){
                return MService.this;
            }
        }
        @Override
        public IBinder onBind(Intent intent) {
            // TODO Auto-generated method stub
            Log.v("CAT", "onBind");
            return myBinder;
        }
        @Override
        public void onCreate() {
            // TODO Auto-generated method stub
            super.onCreate();
            Log.v("CAT", "onCreate");
            try {
                mediaPlayer = new MediaPlayer();
                mediaPlayer.setDataSource(Environment.getExternalStorageDirectory() + "/mp3/trhxn.mp3");
                mediaPlayer.prepare();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                Log.v("CAT", "fail");
                e.printStackTrace();
            } 
        }
        @Override
        public void onDestroy() {
            // TODO Auto-generated method stub
            super.onDestroy();
            Log.v("CAT", "onDestroy");
        }
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            // TODO Auto-generated method stub
            Log.v("CAT", "onStartCommand");
            return super.onStartCommand(intent, flags, startId);
        }
        @Override
        public boolean onUnbind(Intent intent) {
            // TODO Auto-generated method stub
            Log.v("CAT", "onUnbind");
            return false;
        }

        public void start(){
            mediaPlayer.start();
        }
        public void pause(){
            mediaPlayer.pause();
        }
        public void stop(){
            mediaPlayer.stop();
            mediaPlayer.release();
        }
        public int getDuration(){
            return mediaPlayer.getDuration();
        }
        public int getCurrentPosition(){
            return mediaPlayer.getCurrentPosition();
        }
        public void seekTo(int position){
            mediaPlayer.seekTo(position);
        }
    }


    MusicPlayActivity:

    复制代码代码如下:

    package com.tiantian.test;
    import android.app.Activity;
    import android.content.ComponentName;
    import android.content.Intent;
    import android.content.ServiceConnection;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.IBinder;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.SeekBar;
    public class MusicPlayActivity extends Activity {
        /** Called when the activity is first created. */
        MService mService;
        private ServiceConnection conn = new ServiceConnection(){
            @Override
            public void onServiceConnected(ComponentName arg0, IBinder arg1) {
                // TODO Auto-generated method stub
                mService = ((MService.MyBinder)arg1).getService();
                Log.v("CAT", "getServiced");
            }
            @Override
            public void onServiceDisconnected(ComponentName name) {
                // TODO Auto-generated method stub
                mService = null;
            }

        };

        private SeekBar seekBar;
        private Button playBT;

        private boolean isPlaying = false;
        private boolean isBinded = false;

        private Handler mHandler;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            Intent intent = new Intent(MusicPlayActivity.this, MService.class);
            if(!isBinded){
                bindService(intent, conn, BIND_AUTO_CREATE);
                isBinded = true;
            }
            seekBar = (SeekBar) findViewById(R.id.seekBar);
            playBT = (Button) findViewById(R.id.startBT);
            mHandler = new Handler();
            seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

                @Override
                public void onStopTrackingTouch(SeekBar seekBar) {}

                @Override
                public void onStartTrackingTouch(SeekBar seekBar) {}

                @Override
                public void onProgressChanged(SeekBar seekBar, int progress,
                        boolean fromUser) {
                    if(fromUser){
                        mService.seekTo((progress*mService.getDuration())/100);
                    }
                }
            });
            playBT.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    if(!isPlaying){
                        mService.start();
                        isPlaying = true;
                        playBT.setText("暂停");
                        mHandler.post(seekBarThread);
                    }else{
                        mService.pause();
                        isPlaying = false;
                        playBT.setText("播放");
                        mHandler.removeCallbacks(seekBarThread);
                    }
                }
            });

        }

        Runnable seekBarThread = new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                seekBar.setProgress((mService.getCurrentPosition()*100)/mService.getDuration());
                mHandler.postDelayed(seekBarThread, 200);
            }
        };

    }
  • 相关阅读:
    No configuration found for this host:al
    相对路径和绝对路径
    工具类学习
    JRebel没有自动部署的解决方法
    之前写了http解析高德地图时,json转对象搞了半天 , 今天同事用GSON把json转对象,一句代码就解决了,代码如下
    导入项目时遇到的问题
    解析Http请求调用高德地图的api(货车路径规划)
    二进制中的符号位的区分以及表示
    svn提交及更新时的常见问题
    JDBC 连接池下重构操作
  • 原文地址:https://www.cnblogs.com/qingchen1984/p/4290075.html
Copyright © 2020-2023  润新知