Android--MediaPlayer(목록 선택 곡,이전 곡,다음 곡,재생 목록 비우 기,로 컬 음악 파일 검색)

11388 단어 Android

다운로드 링크:http://download.csdn.net/detail/zlqqhs/5079025
 
MediaPlayerActivity 클래스:
 
package com.vince.media;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import android.app.Activity;
import android.app.ProgressDialog;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
import android.widget.Toast;

public class MediaPlayerActivity extends Activity implements OnCompletionListener,OnErrorListener,OnSeekBarChangeListener,OnItemClickListener,Runnable{

	protected static final int SEARCH_MUSIC_SUCCESS = 0;//       
	private SeekBar seekBar;
	private ListView listView;
	private ImageButton btnPlay;
	private TextView tv_currTime,tv_totalTime,tv_showName;
	private List list;
	private ProgressDialog pd; //       
	private MusicListAdapter ma;//    
	private MediaPlayer mp;
	private int currIndex = 0;//            
	private boolean flag = true;//         

	//           ״̬
	private static final int IDLE = 0;
	private static final int PAUSE = 1;
	private static final int START = 2;
	private static final int CURR_TIME_VALUE = 1;

	private int currState = IDLE; //         
	//     (           )
	ExecutorService es = Executors.newSingleThreadExecutor();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.mediaplayer_layout);
		list = new ArrayList();
		mp = new MediaPlayer();
		mp.setOnCompletionListener(this);
		mp.setOnErrorListener(this);
		initView();
	}

	@Override
	protected void onDestroy() {
		if (mp != null) {
			mp.stop();
			flag= false;
			//    
			mp.release();
		}
		super.onDestroy();
	}

	/**
	 *    UI  
	 */
	private void initView() {
		btnPlay = (ImageButton) findViewById(R.id.media_play);
		seekBar = (SeekBar) findViewById(R.id.seekBar1);
		seekBar.setOnSeekBarChangeListener(this);
		listView = (ListView) findViewById(R.id.listView1);
		listView.setOnItemClickListener(this);
		tv_currTime = (TextView) findViewById(R.id.textView1_curr_time);
		tv_totalTime = (TextView) findViewById(R.id.textView1_total_time);
		tv_showName = (TextView) findViewById(R.id.tv_showName);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// xml       
		getMenuInflater().inflate(R.menu.media_menu, menu);
		return super.onCreateOptionsMenu(menu);
	}

	private Handler hander = new Handler() {
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {
			case SEARCH_MUSIC_SUCCESS:
				//         
				ma = new MusicListAdapter();
				listView.setAdapter(ma);
				pd.dismiss();
				break;
			case CURR_TIME_VALUE:
				//      
				tv_currTime.setText(msg.obj.toString());
				break;
			default:
				break;
			}
		};
	};

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		//        
		case R.id.item1_search:
			list.clear();
			//         
			if (Environment.getExternalStorageState().equals(
					Environment.MEDIA_MOUNTED)) {
				pd = ProgressDialog.show(this, "", "        ...", true);
				new Thread(new Runnable() {
					String[] ext = { ".mp3" };
					File file = Environment.getExternalStorageDirectory();

					public void run() {
						search(file, ext);
						hander.sendEmptyMessage(SEARCH_MUSIC_SUCCESS);
					}
				}).start();

			} else {
				Toast.makeText(this, "         ..", Toast.LENGTH_LONG).show();
			}

			break;
		//        
		case R.id.item2_clear:
			list.clear();
			ma.notifyDataSetChanged();
			break;
		//    
		case R.id.item3_exit:
			flag = false;
			this.finish();
			break;
		}
		return super.onOptionsItemSelected(item);
	}

	//       
	private void search(File file, String[] ext) {
		if (file != null) {
			if (file.isDirectory()) {
				File[] listFile = file.listFiles();
				if (listFile != null) {
					for (int i = 0; i < listFile.length; i++) {
						search(listFile[i], ext);
					}
				}
			} else {
				String filename = file.getAbsolutePath();
				for (int i = 0; i < ext.length; i++) {
					if (filename.endsWith(ext[i])) {
						list.add(filename);
						break;
					}
				}
			}
		}
	}

	class MusicListAdapter extends BaseAdapter {

		public int getCount() {
			return list.size();
		}

		public Object getItem(int position) {
			return list.get(position);
		}

		public long getItemId(int position) {
			return position;
		}

		public View getView(int position, View convertView, ViewGroup parent) {
			if (convertView == null) {
				convertView = getLayoutInflater().inflate(R.layout.list_item,
						null);
			}
			TextView tv_music_name = (TextView) convertView
					.findViewById(R.id.textView1_music_name);
			tv_music_name.setText(list.get(position));
			return convertView;
		}

	}

	private void play() {
		switch (currState) {
		case IDLE:
			start();
			break;
		case PAUSE:
			mp.pause();
			btnPlay.setImageResource(R.drawable.ic_media_play);
			currState = START;
			break;
		case START:
			mp.start();
			btnPlay.setImageResource(R.drawable.ic_media_pause);
			currState = PAUSE;
		}
	}

	//   
	private void previous() {
		if((currIndex-1)>=0){
			currIndex--;
			start();
		}else{
			Toast.makeText(this, "           ", Toast.LENGTH_SHORT).show();
		}
	}

	//    
	private void next() {
		if(currIndex+1 0 && currIndex < list.size()) {
			String SongPath = list.get(currIndex);
			mp.reset();
			try {
				mp.setDataSource(SongPath);
				mp.prepare();
				mp.start();
				initSeekBar();
				es.execute(this);
				tv_showName.setText(list.get(currIndex));
				btnPlay.setImageResource(R.drawable.ic_media_pause);
				currState = PAUSE;
			} catch (IOException e) {
				e.printStackTrace();
			}
		}else{
			Toast.makeText(this, "      ", Toast.LENGTH_SHORT).show();
		}
	}
	
	//    
	public void play(View v){
		play();
	}
	
	//     
	public void previous(View v){
		previous();
	}
	
	//     
	public void next(View v){
		next();
	}

	//   ,           ,     
	public void onCompletion(MediaPlayer mp) {
		if(list.size()>0){
			next();
		}else{
			Toast.makeText(this, "      ", Toast.LENGTH_SHORT).show();
		}
	}

	//        
	public boolean onError(MediaPlayer mp, int what, int extra) {
		mp.reset();
		return false;
	}
	
	//   SeekBar
	private void initSeekBar(){
		seekBar.setMax(mp.getDuration());
		seekBar.setProgress(0);
		tv_totalTime.setText(toTime(mp.getDuration()));
	}
	
	private String toTime(int time){
		int minute = time / 1000 / 60;
		int s = time / 1000 % 60;
		String mm = null;
		String ss = null;
		if(minute<10)mm = "0" + minute;
		else mm = minute + "";
		
		if(s <10)ss = "0" + s;
		else ss = "" + s;
		
		return mm + ":" + ss;
	}

	public void run() {
		flag = true;
		while(flag){
			if(mp.getCurrentPosition() parent, View view, int position,
			long id) {
		currIndex = position;
		start();
	}
}

 
mediaplayer_layout.xml 레이아웃 파일:
 



    
    

    

    

        

        

        
    

    

        

        

        
    


 
media_menu.xml 파일:
 



    
    
    
    
    
    


 
strings.xml 파일:
 



    Hello World, MediaActivity!
    Media
          
          
      


 
 

좋은 웹페이지 즐겨찾기