独立开发音乐播放器3

package codefans.app.activity;

import codefans.app.util.Mp3Util;
import codefans.mp3layer.R;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.SeekBar;

public class Mp3PlayerActivity extends Activity
{
	private boolean flag = false;  //播放  暂停 变量判断
	
	private ImageButton playBt;
	private SeekBar seekBar;
	
	
	
	private Intent intent;   //播放信息意图
	private Bundle bundle;   //意图传递的信息
	
	private SeekBarReceiver receiver;
	private int position;   //播放进度条位置
	
	
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		this.playBt = (ImageButton) findViewById(R.id.play);
		this.seekBar = (SeekBar) findViewById(R.id.seekBar);
		
		
		//意图   启动service使用
		this.intent = new Intent("codefans.action.Mp3Player");
		bundle = new Bundle();
		
		
		//注册广播接受器
		receiver = new SeekBarReceiver();  
		IntentFilter filter = new IntentFilter();
		filter.addAction("codefans.intent.action.Mp3Player");
		this.registerReceiver(receiver, filter);
		

	}
	
	
	//播放按钮点击
	public void mediaPlay(View v)
	{
		if(flag == false)  //改变播放按钮图标
		{
		   playBt.setImageResource(R.drawable.stop);
		   flag = true;
		   this.bundle.putString("filePath", "qq.mp3");
		   this.bundle.putInt("operate", Mp3Util.PLAY);
		   this.intent.putExtras(bundle);
		   startService(intent);
		   
		   
		}
		else
		{
			 playBt.setImageResource(R.drawable.play);
			 flag = false;
			 
			 this.bundle.putInt("operate", Mp3Util.STOP);
			 this.intent.putExtras(bundle);
			 startService(intent);
			 
		}
		
	}
	
	@Override
	protected void onDestroy()
	{
		this.unregisterReceiver(receiver);  //解除接受广播 
		
		
		super.onDestroy();
	}
	
	
	
	
	
	
	
	/**
	 *   bindService 实现需要  这里使用startservice 
	 * @author Codefans
	 *
	
	
	//启动服务需要类
	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;
		}
		
		
	}
	 */
	
	
	/**
	 * 播放进度条 位置广播接受器
	 * @author Codefans
	 *
	 */
	private class SeekBarReceiver extends BroadcastReceiver
	{

		@Override
		public void onReceive(Context context, Intent intent)
		{
		    Mp3PlayerActivity.this.position = intent.getIntExtra("position", 0);
		   
		   //  Message msg = new Message();
		    Mp3PlayerActivity.this.seekBar.setProgress(position);
		    
		//    Log.i("result", String.valueOf(position));
		   
		}
		
	}
	
	
}


package codefans.app.service;

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

import codefans.app.util.Mp3Util;

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

public class Mp3Service extends Service
{
	private MediaPlayer mediaPlayer;
	private File musicFile;
	private String name;

	@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 int onStartCommand(Intent intent, int flags, int startId)
	{
		Bundle bundle = intent.getExtras();
		switch (bundle.getInt("operate"))
		{
		case Mp3Util.PLAY:
			this.playMusci(bundle.getString("filePath"));
			break;
		case Mp3Util.STOP:
			this.stop();
			break;
		}

		return START_STICKY;
	}

	@Override
	public IBinder onBind(Intent intent)
	{
		return null;
	}

	// 开始播放
	private void playMusci(String fileName)
	{
		try
		{
			if (fileName.equals(name))  //播放同文件  
			{
				this.mediaPlayer.start();
			}
			else   //播放不同文件
			{
				this.name = fileName;
				this.musicFile = new File(
						Environment.getExternalStorageDirectory(), fileName);
				this.mediaPlayer.reset();
				this.mediaPlayer.setDataSource(musicFile.getAbsolutePath());
				this.mediaPlayer.prepare();
				this.mediaPlayer
						.setOnPreparedListener(new MyPreParedListenner());
				
				Thread t = new SendBroadCastThread();
				t.start();
				
				
				
			}
		}
		catch (IllegalArgumentException e)
		{
			e.printStackTrace();
		}
		catch (IllegalStateException e)
		{
			e.printStackTrace();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}

	}

	private void stop() //暂停
	{
		this.mediaPlayer.pause();
	}

	// mediaPlayer缓存完执行事件
	private class MyPreParedListenner implements OnPreparedListener
	{

		public void onPrepared(MediaPlayer mp)
		{
			mp.start();
		}

	}

	/**
	 * 发送播放位置线程, 每隔一秒发送一次广播 改变播放器进度条
	 * @author Codefans
	 *
	 */
	private class SendBroadCastThread extends Thread
	{
		
		@Override
		public void run()
		{
			while(true)
			{
				Intent intent = new Intent();
				intent.putExtra("position", Mp3Service.this.mediaPlayer.getCurrentPosition());
				
				intent.setAction("codefans.intent.action.Mp3Player");// action与接收器相同
				sendBroadcast(intent);  //发送广播
				
				try
				{
					Thread.sleep(1000);
				}
				catch (InterruptedException e)
				{
					e.printStackTrace();
				}
				
			}
		}
		
		
	}
	
	
	
	/**
	 * 新建一个内部类 Activity调用service时返回此binder
	 * 
	 * @author Codefans
	 * 
	 *         private class Mp3IBinder extends Binder implements Player {
	 * 
	 *         public void playMusic(String filePath) {
	 *         Mp3Service.this.playMusci(filePath); }
	 * 
	 *         }
	 */
}

代码也不知道怎么发  都发上来了 

   今天主要写了关闭Activity后台依然在唱歌   还有一个就是进度条跟随播放 前进



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章