獨立開發音樂播放器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後臺依然在唱歌   還有一個就是進度條跟隨播放 前進



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