广

android开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

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

    2018-04-09 07:41:17 次阅读 稿源:互联网
    广告

    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);
            }
        };

    }

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告