自制播放器,带摇歌功能music play (一)

源码地址: https://github.com/logan9999/Xplay/

效果图:

自制播放器,带摇歌功能music play (一)


自制播放器,带摇歌功能music play (一)



源码:

比较懒直接贴些源码,图片啥就不贴,主要是做些指导性的。

package com.xuan.lx.xplayer.activity;

import com.xuan.lx.xplayer.R;

import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.widget.TabHost;

public class MainActivity extends TabActivity{
	 @Override
	    public void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        setContentView(R.layout.main);
	        
	        Resources res = getResources(); 
	        TabHost tabHost = getTabHost(); 
	        Intent intent = new Intent().setClass(this, ListActivity.class);
	        TabHost.TabSpec spec = tabHost.newTabSpec("音乐").setIndicator("音乐",
	                          res.getDrawable(R.drawable.item))
	                      .setContent(intent);
	        tabHost.addTab(spec);
	        
	        intent = new Intent().setClass(this, ArtistsActivity.class);
	        spec = tabHost.newTabSpec("艺术家").setIndicator("艺术家",
	                          res.getDrawable(R.drawable.artist))
	                      .setContent(intent);
	        tabHost.addTab(spec);

	        intent = new Intent().setClass(this, AlbumsActivity.class);
	        spec = tabHost.newTabSpec("唱片").setIndicator("唱片",
	                          res.getDrawable(R.drawable.album))
	                      .setContent(intent);
	        tabHost.addTab(spec);
	        intent = new Intent().setClass(this, LastedActivity.class);
	        spec = tabHost.newTabSpec("最近播放").setIndicator("最近播放",
	                          res.getDrawable(R.drawable.album))
	                      .setContent(intent);
	        tabHost.addTab(spec);
	        
	        tabHost.setCurrentTab(0);

	    }

}


ListActivity.java



package com.xuan.lx.xplayer.activity;

import java.util.List;
import com.xuan.lx.xplayer.R;
import com.xuan.lx.xplayer.R.drawable;
import com.xuan.lx.xplayer.adapter.MusicAdapter;
import com.xuan.lx.xplayer.util.Music;
import com.xuan.lx.xplayer.util.MusicData;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
/**
 * 初始化音乐列表
 * @author xuan.lx
 *
 */
public class ListActivity extends BaseActivity{
	private ListView listView; 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		convertView = LayoutInflater.from(this).inflate(R.layout.listmusic, null);
		convertView.setBackgroundResource(drawable.player_bg2);
		setContentView(convertView);
		listView = (ListView) this.findViewById(R.id.listAllMusic);
		//获取媒体文件
		List<Music> listMusic = MusicData.getMusicData(getApplicationContext());
		if(listMusic != null && listMusic.size() > 0){
			adapter = new MusicAdapter(this, listMusic);
			listView.setAdapter(adapter);
			listView.setOnItemClickListener(ItemClick);
		}
		
	}
	 
	OnItemClickListener ItemClick = new OnItemClickListener() {
		@Override
		public void onItemClick(AdapterView<?> arg0, View arg1, int position,
				long arg3) {
			adapter.setSelectItem(position);
			adapter.notifyDataSetInvalidated();
			Intent intent = new Intent(ListActivity.this,
					MusicActivity.class);
			intent.putExtra("id", position);
			startActivity(intent);
		}
	};
	@Override
	protected void onStart(){
		super.onStart();
		BaseActivity.adapter.setSelectItem(MusicService.currentId);
		BaseActivity.adapter.notifyDataSetInvalidated();
	}
	
}


LastedActivity.java


package com.xuan.lx.xplayer.activity;

import com.xuan.lx.xplayer.R;
import com.xuan.lx.xplayer.R.drawable;
import com.xuan.lx.xplayer.adapter.LastedAdapter;
import com.xuan.lx.xplayer.util.MusicData;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

public class LastedActivity  extends BaseActivity{
	private ListView lastedListView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		convertView = LayoutInflater.from(this).inflate(R.layout.songs, null);
		convertView.setBackgroundResource(drawable.xim);
		setContentView(convertView);
		
		lastedListView = (ListView) this.findViewById(R.id.lastedListView);
		LastedAdapter adapter = new LastedAdapter(this,MusicData.getMusicData(this));
		lastedListView.setAdapter(adapter);
		lastedListView.setOnItemClickListener(new OnItemClickListener(){
		
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				Intent intent = new Intent(LastedActivity.this,MusicActivity.class);
				intent.putExtra("id", position);
				startActivity(intent);
			}
			
		});
	}

}



package com.xuan.lx.xplayer.activity;

import com.xuan.lx.xplayer.R;
import com.xuan.lx.xplayer.R.drawable;
import com.xuan.lx.xplayer.adapter.AlbumsAdapter;
import com.xuan.lx.xplayer.util.MusicData;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

public class AlbumsActivity  extends BaseActivity{
	private ListView albumtListView;
	 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		convertView = LayoutInflater.from(this).inflate(R.layout.albums, null);
		convertView.setBackgroundResource(drawable.yanshi);
		setContentView(convertView);
		
		albumtListView = (ListView) this.findViewById(R.id.albumListView);
		AlbumsAdapter adapter = new AlbumsAdapter(this,MusicData.getMusicData(this)); 
		albumtListView.setAdapter(adapter);
		albumtListView.setOnItemClickListener(new OnItemClickListener(){
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				Intent intent = new Intent(AlbumsActivity.this,
						MusicActivity.class);
				intent.putExtra("id", position);
				startActivity(intent);
			}});
	}
}
package com.xuan.lx.xplayer.activity;

import com.xuan.lx.xplayer.R;
import com.xuan.lx.xplayer.R.drawable;
import com.xuan.lx.xplayer.adapter.AlbumsAdapter;
import com.xuan.lx.xplayer.util.MusicData;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

public class AlbumsActivity  extends BaseActivity{
	private ListView albumtListView;
	 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		convertView = LayoutInflater.from(this).inflate(R.layout.albums, null);
		convertView.setBackgroundResource(drawable.yanshi);
		setContentView(convertView);
		
		albumtListView = (ListView) this.findViewById(R.id.albumListView);
		AlbumsAdapter adapter = new AlbumsAdapter(this,MusicData.getMusicData(this)); 
		albumtListView.setAdapter(adapter);
		albumtListView.setOnItemClickListener(new OnItemClickListener(){
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				Intent intent = new Intent(AlbumsActivity.this,
						MusicActivity.class);
				intent.putExtra("id", position);
				startActivity(intent);
			}});
	}
}




package com.xuan.lx.xplayer.activity;

import com.xuan.lx.xplayer.R;
import com.xuan.lx.xplayer.R.drawable;
import com.xuan.lx.xplayer.adapter.ArtistsAdapter;
import com.xuan.lx.xplayer.util.MusicData;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;

public class ArtistsActivity  extends BaseActivity{
	private ListView artistListView;
	View convertView ;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	convertView = LayoutInflater.from(this).inflate(R.layout.artist, null);
	convertView.setBackgroundResource(drawable.qianshou);
	setContentView(convertView);
	
	artistListView=(ListView) this.findViewById(R.id.artistListView);
	ArtistsAdapter adapter=new ArtistsAdapter(this, MusicData.getMusicData(this));
	artistListView.setAdapter(adapter);
	artistListView.setOnItemClickListener(new OnItemClickListener() {

		@Override
		public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
				long arg3) {
			Intent intent = new Intent(ArtistsActivity.this,
					MusicActivity.class);
			intent.putExtra("id", arg2);
			startActivity(intent);
		}
	});
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		return super.onCreateOptionsMenu(menu);
		
	}
	@Override
	public boolean onOptionsItemSelected(MenuItem item){
		return super.onOptionsItemSelected(item);
	}
	
}




package com.xuan.lx.xplayer.activity;

import com.xuan.lx.xplayer.adapter.Menus;
import com.xuan.lx.xplayer.adapter.MusicAdapter;
import com.xuan.lx.xplayer.adapter.TabMenu;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

public class BaseActivity extends Activity {
	static MusicAdapter adapter = null;
	View convertView;
	TabMenu tabMenu;

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		Menus.setAcitivty(this);
		Menus.setMenus(menu);
		return super.onCreateOptionsMenu(menu);

	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case (Constants.M_SCAN):
			break;
		case (Constants.M_SKIN):
			break;
		case (Constants.M_SET):
			Intent mIntent = new Intent();
			mIntent.setClass(this, MyPreference.class);
			startActivity(mIntent);
			break;
		case (Constants.M_EXIT):
			Menus.closeApp();
			break;
		}
		return super.onOptionsItemSelected(item);
	}

}



package com.xuan.lx.xplayer.activity;

import android.view.Menu;

import com.xuan.lx.xplayer.R;

/**
 * 定义相关播放状态
 * @author xuan.lx
 *
 */
public class Constants {
	/**
	 * 播放的状态
	 */
	//接着播放
	public static final int PLAYING = 0;
	//重新播放
	public static final int REPLAYING = 1;
    //暂停
	public static final int PUASE = 2;
	//下一首
	public static final int NEXT = 3;
	//上一首
	public static final int PREVIOUS = 4;
	
	//停止
	public static final int STOP = 5;
	
	/**
	 * 播放的方式
	 */
    //循环播放 
	public static final int LOOP = 0;
	//单曲循环
	public static final int CIRCLE = 1;
	//随机播放
	public static final int RANDOM = 2;
	
	/** 菜单图片 **/
	public static final int[] menu_image_array = { R.drawable.ic_menu_scan_default,
		R.drawable.ic_menu_skin_default,R.drawable.ic_menu_setting_default, R.drawable.ic_menu_exit_default};
	/** 菜单文字 **/
	public static final String[] menu_name_array = { "隐藏","背景", "设置", "退出" };
	
	
	/* 独一无二的menu选项identifier,用以识别事件 */
	public static final  int M_SCAN = Menu.FIRST;
	public static final  int M_SKIN = Menu.FIRST + 1;
	public static final  int M_SET = Menu.FIRST + 2;
	public static final  int M_EXIT = Menu.FIRST + 3;
	
	/* menu组ID */
	public static final  int idGroup1 = 0;
	/* menuItemID */
	public static final  int orderMenuItem1 = Menu.NONE;
	public static final  int orderMenuItem2 = Menu.NONE + 1;
	public static final  int orderMenuItem3 = Menu.NONE + 2;
	public static final  int orderMenuItem4 = Menu.NONE + 3;
	//
	public static boolean isListenerSensor = true;
	
}



package com.xuan.lx.xplayer.activity;

import com.xuan.lx.xplayer.R;
import com.xuan.lx.xplayer.R.drawable;
import com.xuan.lx.xplayer.adapter.LastedAdapter;
import com.xuan.lx.xplayer.util.MusicData;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

public class LastedActivity  extends BaseActivity{
	private ListView lastedListView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		convertView = LayoutInflater.from(this).inflate(R.layout.songs, null);
		convertView.setBackgroundResource(drawable.xim);
		setContentView(convertView);
		
		lastedListView = (ListView) this.findViewById(R.id.lastedListView);
		LastedAdapter adapter = new LastedAdapter(this,MusicData.getMusicData(this));
		lastedListView.setAdapter(adapter);
		lastedListView.setOnItemClickListener(new OnItemClickListener(){
		
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				Intent intent = new Intent(LastedActivity.this,MusicActivity.class);
				intent.putExtra("id", position);
				startActivity(intent);
			}
			
		});
	}

}




package com.xuan.lx.xplayer.activity;

import java.util.List;
import com.xuan.lx.xplayer.R;
import com.xuan.lx.xplayer.R.drawable;
import com.xuan.lx.xplayer.adapter.MusicAdapter;
import com.xuan.lx.xplayer.util.Music;
import com.xuan.lx.xplayer.util.MusicData;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
/**
 * 初始化音乐列表
 * @author xuan.lx
 *
 */
public class ListActivity extends BaseActivity{
	private ListView listView; 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		convertView = LayoutInflater.from(this).inflate(R.layout.listmusic, null);
		convertView.setBackgroundResource(drawable.player_bg2);
		setContentView(convertView);
		listView = (ListView) this.findViewById(R.id.listAllMusic);
		//获取媒体文件
		List<Music> listMusic = MusicData.getMusicData(getApplicationContext());
		if(listMusic != null && listMusic.size() > 0){
			adapter = new MusicAdapter(this, listMusic);
			listView.setAdapter(adapter);
			listView.setOnItemClickListener(ItemClick);
		}
		
	}
	 
	OnItemClickListener ItemClick = new OnItemClickListener() {
		@Override
		public void onItemClick(AdapterView<?> arg0, View arg1, int position,
				long arg3) {
			adapter.setSelectItem(position);
			adapter.notifyDataSetInvalidated();
			Intent intent = new Intent(ListActivity.this,
					MusicActivity.class);
			intent.putExtra("id", position);
			startActivity(intent);
		}
	};
	@Override
	protected void onStart(){
		super.onStart();
		BaseActivity.adapter.setSelectItem(MusicService.currentId);
		BaseActivity.adapter.notifyDataSetInvalidated();
	}
	
}



package com.xuan.lx.xplayer.activity;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import com.xuan.lx.xplayer.R;
import com.xuan.lx.xplayer.adapter.TabMenu;

public class MenuActivity extends Activity {
	View menuView;
	/** 菜单图片 **/
	int[] menu_image_array = { R.drawable.menu_account,
			R.drawable.menu_settings, R.drawable.menu_quit };
	/** 菜单文字 **/
	String[] menu_name_array = { "隐藏", "设置", "退出" };

	TabMenu tabMenu;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//menuView = View.inflate(this, R.layout.view_menu, null);
		this.setContentView(R.layout.view_menu);
		TabMenu.MenuBodyAdapter bodyAdapter = new TabMenu.MenuBodyAdapter(this,
				menu_image_array,menu_name_array);
		tabMenu = new TabMenu(this, new BodyClickEvent(),bodyAdapter);// 出现与消失的动画
		
		tabMenu.update();
		tabMenu.setBodyAdapter(bodyAdapter);

	}

	class BodyClickEvent implements OnItemClickListener {
		@Override
		public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
				long arg3) {
			tabMenu.setBodySelect(arg2, Color.GRAY);
		}

	}
	 

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		menu.add("menu");// 必须创建一项
		return super.onCreateOptionsMenu(menu);
	}

	/**
	 * 拦截MENU事件,显示自己的菜单
	 */
	@Override
	public boolean onMenuOpened(int featureId, Menu menu) {
		if (tabMenu != null) {
			if (tabMenu.isShowing()){
				tabMenu.dismiss();
			}else {
				tabMenu.showAtLocation(findViewById(R.id.LinearLayout01),
						Gravity.BOTTOM, 0, 0);
			}
		}
		// 返回为true 则显示系统menu
		return false;
	}
	

}


package com.xuan.lx.xplayer.activity;

import java.io.IOException;
import java.util.List;
import java.util.Random;
import com.xuan.lx.xplayer.R;
import com.xuan.lx.xplayer.util.LrcProcess;
import com.xuan.lx.xplayer.util.LrcView;
import com.xuan.lx.xplayer.util.Music;
import com.xuan.lx.xplayer.util.MusicData;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;

public class MusicService extends Service implements Runnable {
	private MediaPlayer player;
	private List<Music> lists;
	public static volatile int currentId = -1; // 当前正在播放的id
	public static volatile Boolean isRun = true;
	public LrcProcess mLrcProcess;
	public LrcView mLrcView;
	public static int playing_id = 0;
	public static Boolean playing = false;//是否还在播放
	static Random random = new Random(10);
	public volatile static Boolean isPlay = false;
	public volatile static Boolean ringBeforState = false;
	public static int id = 1;
	public static Boolean replaying = false;//重新播放
	public static int playWay = Constants.LOOP;//列表循环;单曲循环 ;随机播放
	
	@Override
	public IBinder onBind(Intent arg0) {
		return null;
	}

	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		lists = MusicData.getMusicData(getApplicationContext());
		
		random = new Random(lists.size()-1);
		// 注册更新进度条广播事件
		SeekBarBroadcastReceiver receiver = new SeekBarBroadcastReceiver();
		IntentFilter filter = new IntentFilter("com.xuan.lx.xplayer.seekBar");
		this.registerReceiver(receiver, filter);
		//启动歌曲进度线程
		new Thread(this).start();
		super.onCreate();
		//电话状态监听
		TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
		telManager.listen(mobliePhoneStateListener,PhoneStateListener.LISTEN_CALL_STATE);
	}
	
	
	public PhoneStateListener mobliePhoneStateListener = new  PhoneStateListener() {

		@Override
		public void onCallStateChanged(int state, String incomingNumber) {
			switch (state) {
			case TelephonyManager.CALL_STATE_IDLE: // 无任何状态时 
				if( MusicService.ringBeforState ){
					MusicActivity.imageBtnPlay.setImageResource(R.drawable.pause1);
					MusicService.isPlay = true;
					Intent intent = new Intent();
					// 设置service 参数
					intent.putExtra("play", Constants.PLAYING);
					intent.putExtra("id", MusicService.currentId);
					onStart(intent,0);
				}
				break;
			case TelephonyManager.CALL_STATE_OFFHOOK: // 接起电话时 
				break;
			case TelephonyManager.CALL_STATE_RINGING: // 电话进来时 
				if(MusicService.isPlay){
					MusicService.ringBeforState = true;
					MusicActivity.imageBtnPlay.setImageResource(R.drawable.play1);
					MusicService.isPlay = false;
					Intent intent = new Intent();
					// 设置service 参数
					intent.putExtra("play", Constants.PUASE);
					intent.putExtra("id", MusicService.currentId);
					onStart(intent,0);
				}				
				break;
			default:
				break;
			}

		}

	};

	/**
	 * 拖动进度条更新到此时播放的位置 broadcastReceiver
	 * @author xuan.lx
	 *
	 */
	private class SeekBarBroadcastReceiver extends BroadcastReceiver {
		@Override
		public void onReceive(Context context, Intent intent) {
			int seekBarPosition = intent.getIntExtra("seekBarPosition", 0);
			player.seekTo(seekBarPosition * player.getDuration() / 100);
			if(null == player)
				player.start();
		}

	}
	
	
	
	@Override
	public void run() {
		// TODO Auto-generated method stub
		while ( true ) {
			try {
				Thread.sleep(200);
			} catch (InterruptedException e) {
			}
			if (null != player) {
				if( isRun ){
					try {
						//获取当前进度
						int position = player.getCurrentPosition();
						//获取总时间
						int total = player.getDuration();
						Intent intent = new Intent("com.xuan.lx.xplayer.progress");
						intent.putExtra("position", position);
						intent.putExtra("total", total);
						//发送广播消息
						sendBroadcast(intent);
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		}
	}
	 
	/**
	 * @author xuan.lx
	 * 重写onStart 启动播放
	 */
	@Override
	public void onStart(Intent intent, int startId) {
		int play = intent.getIntExtra("play", Constants.PLAYING);
		currentId = intent.getIntExtra("id", 1);
		isRun = true;
		switch(play){
		case Constants.PLAYING:
			if (player != null) {
				player.start();
			} else {
				playMusic(currentId);
			}
			break;
		case Constants.PUASE:
			if (null != player) {
				player.pause();
			} 
			break;
		case Constants.STOP:
			if (null != player) {
				isRun = false;
				player.stop();
			} 
			break;
		case Constants.NEXT:
			playMusic(currentId);
			break;
		case Constants.PREVIOUS:
			playMusic(currentId); 
			break;
		case Constants.REPLAYING:
			playMusic(currentId);
			break;
			
		}
		BaseActivity.adapter.setSelectItem(MusicService.currentId);
		BaseActivity.adapter.notifyDataSetInvalidated();
	}
	
	private void playMusic(int id) {
		//如果存在则释放,重新开始播放
		if (null != player) {
			try {
				isRun = false;
				Thread.sleep(200);
				player.reset();
				player.release();
				player = null;
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			
		}
		
		if (id >= lists.size()) {
			currentId = lists.size() - 1;
		} else if (id < 0) {
			currentId = 0;
		}
		Music m = lists.get(currentId);
		String url = m.getUrl();
		player = new MediaPlayer();
		player.reset();
		player.setAudioStreamType(AudioManager.STREAM_MUSIC);
		try {
			player.setDataSource(url);
			player.prepare();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (IllegalStateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		player.start();
		isRun = true;
		
		//当一首播放完后
		player.setOnCompletionListener(new OnCompletionListener() {
			@Override
			public void onCompletion(MediaPlayer mp) {
				Intent intent = new Intent("com.xuan.lx.xplayer.completion");
				switch(MusicService.playWay){
					case Constants.LOOP:
						currentId ++;
						if (currentId >= lists.size()) {
							currentId = 0;
						} else if ( currentId < 0 ) {
							currentId = lists.size() -1;
						}
						playMusic(currentId);
						sendBroadcast(intent);
						break;
					case Constants.CIRCLE:
						playMusic(currentId);
						sendBroadcast(intent);
						break;
					case Constants.RANDOM:
						currentId = random.nextInt(lists.size());
						playMusic(currentId);
						sendBroadcast(intent);
						break;
				}
 			}
		});
		//当出现错误的时候
		player.setOnErrorListener(new OnErrorListener() {
			@Override
			public boolean onError(MediaPlayer mp, int what, int extra) {
				if (null != player) {
					player.release();
					player = null;
				}
				Music m = lists.get(currentId);
				String url = m.getUrl();
				player = new MediaPlayer();
				player.reset();
				player.setAudioStreamType(AudioManager.STREAM_MUSIC);
				try {
					player.setDataSource(url);
					player.prepare();
				} catch (IllegalArgumentException e) {
					e.printStackTrace();
				} catch (SecurityException e) {
					e.printStackTrace();
				} catch (IllegalStateException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
				player.start();
				return false;
			}
		});
	}
	
	/**
	 * 当服务销毁时
	 * @author xuan.lx
	 */
	public void onDestroy() {
		isRun = false;
		if (null != player) {
			player.reset();
			player.release();
			player = null;
		}
    }
	
}


package com.xuan.lx.xplayer.activity;

import com.xuan.lx.xplayer.R;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.widget.Toast;

public class MyPreference extends PreferenceActivity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		addPreferencesFromResource(R.xml.prefs_fragment);
	}
	
	@Override
	public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
			Preference preference) {
		SharedPreferences sf = preference.getSharedPreferences();
		if(preference.getKey().equals("fling")){
			Constants.isListenerSensor = sf.getBoolean("fling", false);
		}
		return super.onPreferenceTreeClick(preferenceScreen, preference);
	}

}

你可能感兴趣的:(android,播放器)