标签:
Android音乐播放器
使用到Android的Actiivity和Service组件
播放音乐使用Service组件
操作按钮等使用Activity与用户交互
同时为了把服务所在进程变成服务进程,防止Activity销毁时依旧执行Service,需要使用Service启动的混合调用,即先使用startService(),然后使用bindService()方法。
原理:使用bindService()方法,启动service。在ServiceConnection的onServiceConnected()方法中返回一个iBinder对象,通过该对象可以操作音乐service中的播放音乐的方法。
代码:
MainActivity
1 import android.app.Activity; 2 import android.content.ComponentName; 3 import android.content.Intent; 4 import android.content.ServiceConnection; 5 import android.os.Bundle; 6 import android.os.IBinder; 7 import android.view.View; 8 9 public class MainActivity extends Activity { 10 11 private MyServiceConnection conn; 12 private MusicInterface mi; 13 14 @Override 15 protected void onCreate(Bundle savedInstanceState) { 16 super.onCreate(savedInstanceState); 17 setContentView(R.layout.activity_main); 18 19 Intent intent = new Intent(this, MusicService.class); 20 startService(intent); 21 conn = new MyServiceConnection();
startService(intent); //把服务所在进程变成服务进程,防止activity销毁时,被杀掉 22 bindService(intent, conn, BIND_AUTO_CREATE); 23 } 24 25 class MyServiceConnection implements ServiceConnection { 26 27 @Override 28 public void onServiceConnected(ComponentName name, IBinder service) { 29 // TODO Auto-generated method stub 30 mi = (MusicInterface) service; 31 } 32 33 @Override 34 public void onServiceDisconnected(ComponentName name) { 35 // TODO Auto-generated method stub 36 37 } 38 39 } 40 41 public void play(View v) { 42 mi.play(); 43 44 } 45 46 public void pause(View v) { 47 mi.pause(); 48 } 49 }
MusicService:
1 import android.app.Service; 2 import android.content.Intent; 3 import android.os.Binder; 4 import android.os.IBinder; 5 6 public class MusicService extends Service { 7 8 @Override 9 public IBinder onBind(Intent intent) { 10 // TODO Auto-generated method stub 11 return new MusicControl(); 12 } 13 14 class MusicControl extends Binder implements MusicInterface { 15 public void play() { 16 MusicService.this.play(); 17 }; 18 19 public void pause() { 20 MusicService.this.pause(); 21 } 22 } 23 24 public void play() { 25 System.out.println("播放音乐"); 26 } 27 28 public void pause() { 29 System.out.println("暂停音乐"); 30 } 31 32 }
把MusicControl类抽取出来为接口,这样可以在MainActivity中只可以访问接口的方法,MusicControl类中的其他方法不被方法
MusicInterface:
1 public interface MusicInterface { 2 3 public void play(); 4 public void pause(); 5 6 }
标签:
原文地址:http://www.cnblogs.com/liyiran/p/5079987.html