MediaPlay的简单音频播放

本文详细介绍了MediaPlayer和PlayService在Android应用中的生命周期管理,包括如何使用bindService和startService来实现服务的灵活调用,以及服务与Activity之间的交互。通过实践案例,展示了如何在服务中播放网络音乐,并通过绑定的接口控制音乐播放状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MediaPlayer.java

//1.采用bindService是因为保证每次进来后可以重新绑定click事件,当然如果已经startService,那么unbindservice,只会unbind,不会onDestroy掉,在进来后虽然不会bind了,但是其实还是绑定成功的,因为调用了onServiceConnected
//2.采用startService是因为保证应用退出后,再进来还是同一个service实例,有着自己生命周期
public class Mediaplayer extends Activity {


		
		private boolean isbinded = false;
		private ServiceConnection conn = new ServiceConnection(){
		
			
			@Override
			public void onServiceConnected(ComponentName arg0, IBinder arg1) {
				
				System.out.println("onServiceConnected");
				isbinded=true;
				final MyBiner bind=(MyBiner)arg1;
				findViewById(R.id.stop).setOnClickListener(new OnClickListener() {
					
					@Override
					public void onClick(View arg0) {
						// TODO Auto-generated method stub
						bind.stopmusic();
					}
				});
				findViewById(R.id.start).setOnClickListener(new OnClickListener() {
					
					@Override
					public void onClick(View arg0) {
						// TODO Auto-generated method stub
						
						bind.playmusic();
					}
				});
			}

			//是在服务崩溃或被杀死导致的连接中断时被调用,而如果我们自己解除绑定时则不会被调用
			@Override
			public void onServiceDisconnected(ComponentName arg0) {
				
				System.out.println("onServiceDisconnected");
			}
			
		};
		
		
		@Override
		protected void onCreate(Bundle savedInstanceState) {
			
			super.onCreate(savedInstanceState);
			setContentView(R.layout.main);
			Intent intent = new Intent(this, PlayService.class);
			startService(intent);  
			bindService(intent, conn, BIND_AUTO_CREATE);
		}
		
		@Override
		protected void onDestroy() {
			// TODO Auto-generated method stub
			if(isbinded==true){
				unbindService(conn);
				isbinded=false;
			}
			super.onDestroy();
		}
}


PlayService.java

public class PlayService extends Service{
	
	private Uri resource=Uri.parse("http://qzone.haoduoge.com/music/C0BEDKZT7D75B00FE55A8D0312EB01F203BDA.mp3");   //from network
	private MediaPlayer mediaplayer=null;
	
	/**
	 * 停止
	 */
	void stopmusic1(){
		if(mediaplayer!=null){
			mediaplayer.stop();	
			mediaplayer.release();
			mediaplayer=null;
		}
	}
	/**
	 * 方式1
	 */
	private void playmusic1(){
		
		stopmusic1();
		mediaplayer=MediaPlayer.create(this,R.raw.yuanwang);  //这里其实是会阻塞主线程的 ,所以要放到其他线程
		mediaplayer.start();         //no need to call prepare because create does for you
	}
	/**
	 * 方式2
	 */
	private void playmusic2(){
		stopmusic1();
		mediaplayer=new MediaPlayer();
		mediaplayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
		try{
			mediaplayer.setDataSource(this,resource);   //这里其实是会阻塞主线程的 ,所以要放到其他线程
			mediaplayer.prepare();   
		}catch(IOException e){
			e.printStackTrace();
		}
		mediaplayer.start();
	}
	public  class MyBiner extends Binder{
		
		public  void playmusic(){
			playmusic1();
		}
		public  void stopmusic(){
			stopmusic1();
		}
	}
	@Override
	public IBinder onBind(Intent arg0) {
		System.out.println("onBind");
		return new MyBiner();
	}
	
	@Override
	public void onCreate() {
		System.out.println("onCreate");
		super.onCreate();
	}
	@Override
	public void onDestroy() {
		System.out.println("onDestroy");
		super.onDestroy();
	}
	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		System.out.println("onStartCommand");
		return super.onStartCommand(intent, flags, startId);
	}
	@Override
	public void onStart(Intent intent, int startId) {
		System.out.println("onStart");
		super.onStart(intent, startId);
	}
	@Override
	public boolean onUnbind(Intent intent) {
		System.out.println("onUnbind");
		return super.onUnbind(intent);
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值