package com.example.lenovo.musicplay;import android.content.Intent;import android.os.Handler;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.ProgressBar;import android.widget.TextView;public class PlayActivity1 extends AppCompatActivity { TextView tv_1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_play1); tv_1=(TextView)findViewById(R.id.tv_1); Intent intent=new Intent(this,MusicService1.class); } Intent intent; public void bt_1(View v) { //向service发送播放指令 intent.putExtra("action", "play"); startService(intent); tv_1.setText("播放状态:正在播放"); } public void bt_2(View v) { //向service发送停止指令 intent.putExtra("action","stop"); startService(intent); tv_1.setText("播放状态:停止播放"); } public void bt_3(View v) { //向service发送暂停指令 intent.putExtra("action","pause"); startService(intent); tv_1.setText("播放状态:暂停播放"); } public void bt_4(View v) { //向service发送退出指令 bt_3(v); stopService(intent); finish(); }}
package com.example.lenovo.musicplay;import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.os.IBinder;public class MusicService1 extends Service { public MusicService1() { } //播放器对象 MediaPlayer mediaPlayer; @Override public int onStartCommand(Intent intent, int flags, int startId) { //处理指令 String ac=intent.getStringExtra("action"); switch (ac) { case "play": if (mediaPlayer == null) { //用静态方法构造 mediaPlayer = MediaPlayer.create(this, R.raw.fuqin); mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mediaPlayer.reset(); mediaPlayer.release(); mediaPlayer = null; } }); } mediaPlayer.start(); break; case "stop": if (mediaPlayer!=null) { mediaPlayer.stop();//停止 mediaPlayer.reset();//重置 mediaPlayer.release();//释放 mediaPlayer = null;//置空 } break; case "pause": if (mediaPlayer!=null&&mediaPlayer.isPlaying()) { mediaPlayer.pause();//暂停 } break; } return super.onStartCommand(intent, flags, startId); } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. throw new UnsupportedOperationException("Not yet implemented"); }}
package com.example.lenovo.musicplay;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.os.IBinder;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.ProgressBar;import android.widget.TextView;import java.util.Vector;public class Play2Activity extends AppCompatActivity { TextView tv_1; ProgressBar pb_1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_play2); pb_1 = (ProgressBar) findViewById(R.id.pb_1); tv_1 = (TextView) findViewById(R.id.tv_1); Intent intent=new Intent(this,MusicService2.class); playServiceConnection=new PlayServiceConnection(); //绑定 bindService(intent,playServiceConnection, Context.BIND_AUTO_CREATE); } //代理对象 MusicService2.PlayBinder playBinder; PlayServiceConnection playServiceConnection; //服务连接类 class PlayServiceConnection implements ServiceConnection { @Override public void onServiceConnected(ComponentName name, IBinder service) { //得到代理对象 playBinder=(MusicService2.PlayBinder) service; Log.e("TAG","得到代理对象"); } @Override public void onServiceDisconnected(ComponentName name) { } } public void bt_1(View v) { if (playBinder!=null) { playBinder.play(); } } public void bt_2(View v) { if (playBinder!=null) { playBinder.pause(); } } public void bt_3(View v) { if (playBinder!=null) { playBinder.stop(); } } public void bt_4(View v) { if (playServiceConnection!=null) { bt_3(v); unbindService(playServiceConnection);//解绑 finish(); } }}
package com.example.lenovo.musicplay;import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.os.Binder;import android.os.IBinder;public class MusicService2 extends Service { //播放器对象 MediaPlayer mediaPlayer; public class PlayBinder extends Binder { public void play() { if (mediaPlayer == null) { //用静态方法构造 mediaPlayer = MediaPlayer.create(MusicService2.this, R.raw.fuqin); mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mediaPlayer.reset(); mediaPlayer.release(); mediaPlayer = null; } }); } mediaPlayer.start(); } public void pause() { if (mediaPlayer!=null&&mediaPlayer.isPlaying()) { mediaPlayer.pause();//暂停 } } public void stop() { if (mediaPlayer!=null) { mediaPlayer.stop();//停止 mediaPlayer.reset();//重置 mediaPlayer.release();//释放 mediaPlayer = null;//置空 } } } @Override public IBinder onBind(Intent intent) { return new PlayBinder(); }}
加进度条(Service 跨线程+消息机制)
package com.example.lenovo.musicplay;import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.os.Binder;import android.os.IBinder;public class MusicService1 extends Service { public MusicService1() { } //播放器对象 MediaPlayer mediaPlayer; String strPlay="等待播放"; @Override public int onStartCommand(Intent intent, int flags, int startId) { //处理指令 String ac=intent.getStringExtra("action"); switch (ac) { case "play": if (mediaPlayer == null) { //用静态方法构造 mediaPlayer = MediaPlayer.create(this, R.raw.fuqin); mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mediaPlayer.reset(); mediaPlayer.release(); mediaPlayer = null; strPlay="完成播放"; } }); } mediaPlayer.start(); strPlay="正在播放"; break; case "stop": if (mediaPlayer!=null) { mediaPlayer.stop();//停止 mediaPlayer.reset();//重置 mediaPlayer.release();//释放 mediaPlayer = null;//置空 strPlay="停止播放"; } break; case "pause": if (mediaPlayer!=null&&mediaPlayer.isPlaying()) { mediaPlayer.pause();//暂停 strPlay="暂停播放"; } break; } return super.onStartCommand(intent, flags, startId); } //代理对象 public class PlayBinder extends Binder { //得到进度条总长度 public int getMusicDuration() { int rtn=100; if (mediaPlayer!=null) { rtn=mediaPlayer.getDuration(); } return rtn; } //得到当前播放进度 public int getMusicCurrentPosition() { int rtn=0; if (mediaPlayer!=null) { rtn=mediaPlayer.getCurrentPosition(); } return rtn; } //得到当前状态 public String getPlayState() { return strPlay; } } @Override public IBinder onBind(Intent intent) { return new PlayBinder(); }}
package com.example.lenovo.musicplay;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.os.Handler;import android.os.IBinder;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.ProgressBar;import android.widget.TextView;public class PlayActivity1 extends AppCompatActivity { TextView tv_1; ProgressBar pb_1; Intent intent; PlaySC playSC; Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_play1); tv_1=(TextView)findViewById(R.id.tv_1); pb_1=(ProgressBar)findViewById(R.id.pb_1); intent=new Intent(this,MusicService1.class); playSC=new PlaySC(); //绑定 bindService(intent,playSC, Context.BIND_AUTO_CREATE); handler = new Handler() { @Override public void handleMessage(Message msg){ if (msg.what==1) { String str=msg.obj.toString(); tv_1.setText("播放状态:"+str); } } }; } public void bt_1(View v) { //向service发送播放指令 intent.putExtra("action", "play"); startService(intent); //tv_1.setText("播放状态:正在播放"); } public void bt_2(View v) { //向service发送停止指令 intent.putExtra("action","stop"); startService(intent); //tv_1.setText("播放状态:停止播放"); } public void bt_3(View v) { //向service发送暂停指令 intent.putExtra("action","pause"); startService(intent); //tv_1.setText("播放状态:暂停播放"); } public void bt_4(View v) { //向service发送退出指令 bt_3(v); stopService(intent); if (playSC!=null) { unbindService(playSC);//解绑 playSC=null; } finish(); } class PlaySC implements ServiceConnection { @Override public void onServiceConnected(ComponentName name, IBinder service) { final MusicService1.PlayBinder playBinder=(MusicService1.PlayBinder)service; //启动子线程 new Thread() { @Override public void run() { while (true) { int max=playBinder.getMusicDuration(); pb_1.setMax(max); int c=playBinder.getMusicCurrentPosition(); pb_1.setProgress(c); //设置播放状态 Message msg=new Message(); msg.what=1; msg.obj=playBinder.getPlayState(); handler.sendMessage(msg); try { Thread.sleep(500); } catch (Exception e) { e.printStackTrace(); } } } }.start(); } @Override public void onServiceDisconnected(ComponentName name) { } }}