现在的位置: 首页 > 综合 > 正文

独立开发音乐播放器2

2013年10月10日 ⁄ 综合 ⁄ 共 3018字 ⁄ 字号 评论关闭
package codefans.app.service;

import java.io.File;
import java.io.IOException;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Binder;
import android.os.Environment;
import android.os.IBinder;

public class Mp3Service extends Service
{
	private IBinder myBinder = new Mp3IBinder();
	private MediaPlayer mediaPlayer;
    private File musicFile;
	
	@Override
	public void onCreate()  
	{
		if(this.mediaPlayer == null)
		{
			this.mediaPlayer = new MediaPlayer();
		}
	}
    
	@Override
	public void onDestroy()
	{
		if(this.mediaPlayer != null)
		{
			this.mediaPlayer.stop();
			this.mediaPlayer.release();
			this.mediaPlayer = null;
		}
		super.onDestroy();
	}
	
	@Override
	public IBinder onBind(Intent intent)
	{
		return myBinder;
	}

	//开始播放
	private void playMusci(String fileName)
	{
		try
		{
			this.musicFile = new File(Environment.getExternalStorageDirectory(), fileName);
			this.mediaPlayer.setDataSource(musicFile.getAbsolutePath());
			this.mediaPlayer.prepare();
			this.mediaPlayer.setOnPreparedListener(new MyPreParedListenner());
		}
		catch (IllegalArgumentException e)
		{
			e.printStackTrace();
		}
		catch (IllegalStateException e)
		{
			e.printStackTrace();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
		
	}
	
	//mediaPlayer缓存完执行事件
	private class MyPreParedListenner implements OnPreparedListener
	{

		public void onPrepared(MediaPlayer mp)
		{
			Mp3Service.this.mediaPlayer.start();
		}
		
	}
	
	/**
	 * 新建一个内部类 Activity调用service时返回此binder
	 * @author Codefans
	 */
	private class Mp3IBinder extends Binder implements Player
	{

		public void playMusic(String filePath)
		{
			Mp3Service.this.playMusci(filePath);
		}
		
	}

}

service 播放功能

package codefans.app.activity;

import codefans.app.service.Player;
import codefans.mp3layer.R;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;
import android.widget.ImageButton;

public class Mp3PlayerActivity extends Activity
{
	private boolean flag = false;
	private ImageButton playBt;
	private Player binder;
	private ServiceConnection myServiceConnection = new MyServiceConnection();
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		this.playBt = (ImageButton) findViewById(R.id.play);
		Intent intent = new Intent("codefans.action.Mp3Player");
		bindService(intent, myServiceConnection, Context.BIND_AUTO_CREATE);
		

	}
	
	
	//播放按钮点击
	public void mediaPlay(View v)
	{
		if(flag == false)  //改变播放按钮图标
		{
		   playBt.setImageResource(R.drawable.stop);
		   flag = true;
		   
		  this.binder.playMusic("qq.mp3");
		   
		   
		   
		}
		else
		{
			 playBt.setImageResource(R.drawable.play);
			 flag = false;
		}
		
	}
	
	@Override
	protected void onDestroy()
	{
		
		unbindService(myServiceConnection);
		
		super.onDestroy();
	}
	
	
	
	//启动服务需要类
	private class MyServiceConnection implements ServiceConnection
	{

		public void onServiceConnected(ComponentName name, IBinder service)
		{
			Mp3PlayerActivity.this.binder = (Player) service;
			
		}

		public void onServiceDisconnected(ComponentName name)
		{
			Mp3PlayerActivity.this.binder = null;
		}
		
		
	}
	
	
	
	
	
}

这里用bindservice 好像不行,因为这样如果挂掉Activity 那个service服务也停止了  应该用startservice  ! 这个明天再写了 很迟了(嘿嘿)

只写了一个播放功能

  

上一篇   点击打开链接

抱歉!评论已关闭.