在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → android 音乐播放器源码

android 音乐播放器源码

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:11.95M
  • 下载次数:147
  • 浏览次数:1848
  • 发布时间:2015-08-13
  • 实例类别:Android平台开发
  • 发 布 人:crazycode
  • 文件格式:.zip
  • 所需积分:2
 相关标签: 播放器 Android 音乐 播放

实例介绍

【实例简介】

【实例截图】

【核心代码】


package com.arist.MusicPlayer;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Timer;
import java.util.TimerTask;

import com.arist.R;
import com.arist.Adapter.FolderAdapter;
import com.arist.Adapter.MainGridAdapter;
import com.arist.Adapter.MusicAdapter;
import com.arist.Adapter.MyPagerAdapter;
import com.arist.Adapter.NetMusicAdapter;
import com.arist.PopMenu.PopupMenu;
import com.arist.PopMenu.PopupMenuBodyAdapter;
import com.arist.PopMenu.PopupWindowSearch;
import com.arist.biz.ButtonInfoBiz;
import com.arist.biz.MusicBiz;
import com.arist.dao.MusicDao;
import com.arist.dao.MusicFolderDao;
import com.arist.entity.BaiduMp3;
import com.arist.entity.ButtonInfo;
import com.arist.entity.Music;
import com.arist.entity.MusicFolder;
import com.arist.entity.NetMusic;
import com.arist.service.MusicDownloadService;
import com.arist.util.AlbumPicUtil;
import com.arist.util.BitmapService;
import com.arist.util.Constant;
import com.arist.util.FavMusicXmlUtil;
import com.arist.util.HttpService;
import com.arist.util.MainGridPreference;
import com.arist.util.SettingScreen;
import com.arist.util.TimeFormat;
import com.arist.util2.BaiduMp3Util;
import com.arist.util2.DownloadMusicUtil;
import com.arist.util2.NetMusicXmlParseTask;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.AlertDialog.Builder;
import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences.Editor;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.GridView;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

/*
 * Copyright (C) 2012 @2yuanma.com
 * Email: i2yuanma@163.com
 * 更多移动终端源码: www.2yuanma.com
 * 
 */
/**
 * 主界面的控制器
 * 
 */
public class MainActivity extends Activity {
	
	// initData()
	private int screenWidth;
	private MusicBiz musicBiz;
	private MusicDao musicDao;
	private MusicFolderDao folderDao;
	private String commontItemTexts[] = new String[8];
	private int currentPageIndex = 0;
	
	private ArrayList<Music> musics;		// 适配给 Adapter 的数据集
	private ArrayList<MusicFolder> folders;
	private ArrayList<ButtonInfo> infos;
	private ButtonInfoBiz buttonInfoBiz;
	private MusicAdapter musicAdapter;		// Adapter
	private FolderAdapter folderAdapter;
	private MainGridAdapter mainGridAdapter;
	private NetMusicAdapter netMusicAdapter;
	
	private MainGridPreference mainPref;
	public void initData(){
		musicDao = new MusicDao(this);
		folderDao = new MusicFolderDao(this);
		
		musicBiz = new MusicBiz(this);
		// 以下两句不应该有
		musicBiz.setMusicDao(musicDao);
		musicBiz.setFolderDao(folderDao);
		
		mainPref = new MainGridPreference(this);
		
		commontItemTexts = this.getResources().getStringArray(R.array.popmenu_options_text);

		screenWidth = this.getWindowManager().getDefaultDisplay().getWidth();
		
        playModeEntries = getResources().getStringArray(R.array.play_mode_entries);
        
    	// 获取整形资源数组
    	TypedArray ta = getResources().obtainTypedArray(R.array.popmenu_values);
    	for(int i=0;i<commonItemIds.length;i  ){
    		commonItemIds[i] = ta.getResourceId(i, 0);
    	}
    	
    	// 初始化MainButton界面
    	infos = new ArrayList<ButtonInfo>();
    	buttonInfoBiz = new ButtonInfoBiz(this);
    	infos = buttonInfoBiz.getButtonInfos();
    	mainGridAdapter = new MainGridAdapter(this, infos);
    	
    	// 初始化FolderList界面
    	folders = new ArrayList<MusicFolder>();
    	folders = folderDao.getAllFolder();
    	folderAdapter = new FolderAdapter(this, folders);
    	
    	// 初始化MusicList界面
    	musics = new ArrayList<Music>();
    	if(folders.size()>0)
    		musics = musicDao.getMusic(folders.get(0).getPath());
    	musicAdapter = new MusicAdapter(this, musics);
	}
	
	// initView()
	private int commonItemIds[] = new int[8];
	private PopupMenu popMenu = null;
	private PopupMenuBodyAdapter commonAdapter = null;
	private PopupWindowSearch popupWindowSearch = null;
	
	private static final int TYPE_FOLDER = 2;
	private static final int TYPE_MUSIC = 3;
	private ViewPager vpContainer = null;
	private LayoutInflater inflater;
	private MyPagerAdapter vpAdapter;
	private ArrayList<View> vpViews = new ArrayList<View>();
	private RelativeLayout layout;
	private GridView gv;
	private ListView listViewFolder;
	private ListView listViewMusic;
	private FrameLayout netMusicLayout;
	private ListView listViewNetMusic;
	private static final int VP_BUTTONGRID = 0;
	private static final int VP_FOLDERLIST = 1;
	private static final int VP_MUSICLIST = 2;
	private static final int VP_NETMUSICLIST = 3;
	public void initView(){
		// 用于设置背景
		layout = (RelativeLayout)findViewById(R.id.main_layout);
		inflater = LayoutInflater.from(this);
		
		// 初始化三个界面
		gv = (GridView)inflater.inflate(R.layout.grid_view_button, null);
		gv.setColumnWidth(screenWidth/3);
		listViewFolder = (ListView)inflater.inflate(R.layout.list_view_music, null);
		listViewFolder.setFastScrollEnabled(true);
		listViewMusic = (ListView)inflater.inflate(R.layout.list_view_music, null);
		listViewMusic.setFastScrollEnabled(true);
		gv.setAdapter(mainGridAdapter);
		gv.setOnItemClickListener(new OnItemClickListenerMain());
		listViewFolder.setAdapter(folderAdapter);
		listViewFolder.setOnItemClickListener(new OnItemClickListenerFolder());
		listViewMusic.setAdapter(musicAdapter);
		listViewMusic.setOnItemClickListener(new OnItemClickListenerMusic());
		listViewMusic.setOnItemLongClickListener(new OnItemLongClickListenerMusic());
		
		// 创建ViewPager对象
		vpContainer = (ViewPager)findViewById(R.id.vpContainer);
		vpContainer.setFocusable(true);
		// 初始化几个界面
		vpViews.add((View)gv);
		vpViews.add((View)listViewFolder);
		vpViews.add((View)listViewMusic);
		
		this.popMenu = new PopupMenu(this,  0xbb000000, new PopupBodyOnItemClickListenerCallback());
		this.commonAdapter = new PopupMenuBodyAdapter(this, this.commonItemIds, this.commontItemTexts);
		this.popMenu.setPopupMenuBodyAdapter(this.commonAdapter) ;
		this.popupWindowSearch = new PopupWindowSearch(this, handler);
	}
	
	// updateView()
	private int selectedButtonId = Constant.folderButtonSelected;	//默认选中文件夹
	private void updateView(int type){
		switch (type) {
    	// 更新文件夹界面
		case TYPE_FOLDER:
			// 选中不同按钮时会出现不同的文件夹
			switch(selectedButtonId){
			case Constant.albumButtonSelected:
				folders = musicDao.getTempAlbums();
				handler.postDelayed(new Runnable() {
					public void run() {
						folders = musicDao.getAlbums();
						folderAdapter.changeData(folders);
					}
				}, 200);
				break;
			case Constant.artistButtonSelected:
				folders = musicDao.getTempArtists();
				handler.postDelayed(new Runnable() {
					public void run() {
						folders = musicDao.getArtists();
						folderAdapter.changeData(folders);
					}
				}, 200);
				break;
			case Constant.folderButtonSelected:
				folders = folderDao.getAllFolder();
				break;
			}
			folderAdapter.changeData(folders);
			vpContainer.setCurrentItem(VP_FOLDERLIST, true);
			break;
			
	    // 更新音乐列表界面,只需更新数据
		case TYPE_MUSIC:
			// 选中不同按钮时会出现不同的歌曲列表
			switch(selectedButtonId){
			case Constant.allMusicButtonSelected:
				musics = musicDao.getAllMusic();
				break;
			case Constant.favritorButtonSelected:		
				try {
					musics = FavMusicXmlUtil.getFavMusic();
					mainPref.saveFav(musics.size());
				} catch (Exception e) {
					e.printStackTrace();
				}
				break;
			case Constant.recentAddButtonSelected:		
				musics = musicBiz.getRecentAddMusic();
				break;
			case Constant.musicFolderSelected:	
				break;
			case Constant.downloadButtonSelected:	// 下载的歌曲
				try{
					musics = musicDao.getMusic(Constant.BASE_DOWNLOAD_PATH.substring(
								0, Constant.BASE_DOWNLOAD_PATH.length()-1));
//					Log.i("info", "download musics size:" musics.size());
				}catch(Exception e){}
				break;
			}
			sortMusicList(musics);
			musicAdapter.changeData(musics);
			vpContainer.setCurrentItem(VP_MUSICLIST, true);
			break;
		}
    }

	private void sortMusicList(ArrayList<Music> musics) {
		Collections.sort(musics, new Comparator<Music>() {
			public int compare(Music m1, Music m2) {
				if(m1.getTitle().compareTo(m2.getTitle()) > 0){
					return 1;
				}else{
					return -1;
				}
			}
		});
	}
	
	private ImageButton btnNext;
	private ImageButton btnPre;
	private ImageButton btnPlay;
	private ImageView ivAlbum;
	private ProgressBar musicProgressMain;
	private TextView controlPanelTitleMain;
	private TextView controlPanelArtistMain;
	private Animation anim;
	private Handler handler;
	private Timer seekTimer;
	private boolean seeking = false;
	private Button btnLocalMusic,btnRemoteMusic;
	private ImageView iv_comp1,iv_comp2,iv_comp3,iv_comp4;
	private ImageView[] comps;
	private ImageView ivNetMusicLoading;
	private EditText etNetMusicSearch;
	private void initListener(){
		iv_comp1 = (ImageView)findViewById(R.id.iv_comp1);
		iv_comp2 = (ImageView)findViewById(R.id.iv_comp2);
		iv_comp3 = (ImageView)findViewById(R.id.iv_comp3);
		iv_comp4 = (ImageView)findViewById(R.id.iv_comp4);
		comps = new ImageView[]{iv_comp1,iv_comp2,iv_comp3,iv_comp4};
//		Log.i("info", "the size of comps = " comps.length);
		btnNext = (ImageButton)findViewById(R.id.btnNext);
		btnPre = (ImageButton)findViewById(R.id.btnPrevious);
		btnPlay = (ImageButton)findViewById(R.id.btnPlay);
		ivAlbum = (ImageView)findViewById(R.id.controlPanelAlbumPicMain);
		musicProgressMain = (ProgressBar)findViewById(R.id.musicProgressMain);
		controlPanelTitleMain = (TextView)findViewById(R.id.controlPanelTitleMain);
		controlPanelArtistMain = (TextView)findViewById(R.id.controlPanelArtistMain);
		btnLocalMusic = (Button)findViewById(R.id.btnLocalMusic);
		btnRemoteMusic = (Button)findViewById(R.id.btnRemoteMusic);
		
		// 本地歌曲
		btnLocalMusic.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				vpContainer.setCurrentItem(VP_BUTTONGRID, true);
			}
		});
		
		// 远程歌曲
		btnRemoteMusic.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				try {
					if(vpViews.size() < 4){
						netMusicLayout = (FrameLayout)inflater.inflate(R.layout.list_view_net_music, null);
						ivNetMusicLoading = (ImageView)netMusicLayout.findViewById(R.id.iv_net_music_loading);
						listViewNetMusic = (ListView)netMusicLayout.findViewById(R.id.lv_net_music);
						listViewNetMusic.setFastScrollEnabled(true);
						listViewNetMusic.setHeaderDividersEnabled(true);
						View header = inflater.inflate(R.layout.net_music_list_search, null);
						etNetMusicSearch = (EditText)header.findViewById(R.id.et_net_music_search);
						ImageButton btnNetMusicSearch = (ImageButton)header.findViewById(R.id.net_music_search_btn);
						btnNetMusicSearch.setOnClickListener(new btnNetMusicSearchOnClickListener());
						listViewNetMusic.addHeaderView(header);
						netMusicAdapter = new NetMusicAdapter(MainActivity.this, null, listViewNetMusic);
						listViewNetMusic.setAdapter(netMusicAdapter);
						listViewNetMusic.setOnItemClickListener(new OnItemClickListenerNetMusic());
						listViewNetMusic.setOnItemLongClickListener(new OnItemLongClickListenerNetMusic());
						vpViews.add((View)netMusicLayout);
						vpAdapter.notifyDataSetChanged();
						vpContainer.setCurrentItem(VP_NETMUSICLIST,true);
						// 发送消息开始动画
						Message msg = handler.obtainMessage();
						msg.what = Constant.NET_MUSIC_LOADING;
						msg.arg1  = startAnim;
						handler.sendMessage(msg);
						
						// 开始执行 xml 异步解析的任务
						NetMusicXmlParseTask task = new NetMusicXmlParseTask(MainActivity.this);
						task.execute(HttpService.BASE_URL   "sounds.xml");
					}
					if(listViewNetMusic.getAdapter().getCount() < 5){
						Message msg = handler.obtainMessage();
						msg.what = Constant.NET_MUSIC_LOADING;
						msg.arg1  = startAnim;
						handler.sendMessage(msg);
						
						// 开始执行 xml 异步解析的任务
						NetMusicXmlParseTask task = new NetMusicXmlParseTask(MainActivity.this);
						task.execute(HttpService.BASE_URL   "sounds.xml");
					}
					vpContainer.setCurrentItem(VP_NETMUSICLIST);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
		
		// 单击下一首的操作
		btnNext.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				doPlayNext();
			}
		});
		// 长按下一首的操作
		btnNext.setOnLongClickListener(new OnLongClickListener() {
			public boolean onLongClick(View v) {
				seekTimer = new Timer();
				seekTimer.schedule(new TimerTask() {
					int i = 1;
					public void run() {
						Message msg = handler.obtainMessage();
						msg.what = Constant.SEEK_UPDATE_NEXT;
						Bundle bundle = new Bundle();
						bundle.putInt("text", i  );
						msg.setData(bundle);
						handler.sendMessage(msg);
					}
				}, 0, 100);
				seeking = true;
				return true;
			}
		});
		btnNext.setOnTouchListener(new OnTouchListener() {
			public boolean onTouch(View v, MotionEvent event) {
				if(MotionEvent.ACTION_UP == event.getAction()){
					if(seekTimer != null){
						seekTimer.cancel();
						Intent intent = new Intent(Constant.ACTION_SEEK);
						intent.putExtra("seekProgress", seekProgress);
						sendBroadcast(intent);
						seeking = false;
					}
				}
				return false;
			}
		});
		// 单击上一首的操作
		btnPre.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				doPlayPre();
			}
		});
		// 长按上一首的操作
		btnPre.setOnLongClickListener(new OnLongClickListener() {
			public boolean onLongClick(View v) {
				seekTimer = new Timer();
				seekTimer.schedule(new TimerTask() {
					int i = 1;
					public void run() {
						Message msg = handler.obtainMessage();
						msg.what = Constant.SEEK_UPDATE_PRE;
						Bundle bundle = new Bundle();
						bundle.putInt("text", i  );
						msg.setData(bundle);
						handler.sendMessage(msg);
					}
				}, 0, 100);
				seeking = true;
				return true;
			}
		});
		btnPre.setOnTouchListener(new OnTouchListener() {
			public boolean onTouch(View v, MotionEvent event) {
				if(MotionEvent.ACTION_UP == event.getAction()){
					if(seekTimer != null){
						seekTimer.cancel();
						Intent intent = new Intent(Constant.ACTION_SEEK);
						intent.putExtra("seekProgress", seekProgress);
						sendBroadcast(intent);
						seeking = false;
					}
				}
				return false;
			}
		});
		// 播放按钮的操作
		btnPlay.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				doPlay();
			}
		});
		ivAlbum.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				// 写一个震动的动画,添加动画监听然后跳转界面
				anim = AnimationUtils.loadAnimation(MainActivity.this, R.anim.vibrate);
				ivAlbum.startAnimation(anim);
				anim.setAnimationListener(new AnimationListener() {
					public void onAnimationStart(Animation animation) {}
					public void onAnimationRepeat(Animation animation) {}
					public void onAnimationEnd(Animation animation) {
						Intent intent = new Intent(MainActivity.this,MusicPlayActivity.class);
						startActivity(intent);
						overridePendingTransition(R.anim.right_in, R.anim.left_out);
					}
				});
			}
		});
		vpContainer.setOnPageChangeListener(new OnPageChangeListener() {
			public void onPageSelected(int position) {
//				Log.i("info", "currentPageIndex:" position);
				currentPageIndex = position;
				if(currentPageIndex == VP_BUTTONGRID){
					infos = buttonInfoBiz.getButtonInfos();
					mainGridAdapter.setData(infos);
					mainGridAdapter.notifyDataSetChanged();
				}
					
				final int totalPage = vpViews.size();
				final int[] positions = new int[]{0,0,0,0};
				for(int i=0;i<totalPage;i  ){
					if(i == currentPageIndex)
						positions[i] = 1;
				}
//				Log.i("info", "onPageSelected" Thread.currentThread().getName());
//				Log.i("info", positions[0] ",," positions[1] ",," positions[2] ",,");
				setComps(totalPage, positions);
				new Thread(){
					public void run() {
					};
				}.start();
			}
			public void onPageScrolled(int arg0, float arg1, int arg2) {}
			public void onPageScrollStateChanged(int arg0) {}
		});
	}
	
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    	PackageManager pm = getPackageManager();
    	ResolveInfo homeInfo = pm.resolveActivity(new Intent
    			(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME), 0); 
    	switch(keyCode){
    	case KeyEvent.KEYCODE_BACK:
//    		Log.i("info", "currentPageIndex:" currentPageIndex "view:" vpContainer.getChildAt(currentPageIndex));
    		if(currentPageIndex == 0){
    			// 按返回键退出界面后,会在后台运行
    			ActivityInfo ai = homeInfo.activityInfo;
    			Intent startIntent = new Intent(Intent.ACTION_MAIN);
    			startIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    			startIntent.setComponent(new ComponentName(ai.packageName, ai.name));
    			startActivitySafely(startIntent);
    			return true;
    		}
    		currentPageIndex = (--currentPageIndex < 0) ? 0 : currentPageIndex;
    		if(currentPageIndex == 1)
    			folderAdapter.notifyDataSetChanged();
    		vpContainer.setCurrentItem(currentPageIndex, true);
            return true;
    	case KeyEvent.KEYCODE_MENU:
//    		Log.i("info", "KEYCODE_MENU IS CALLED");
    		if(popMenu.isShowing())
    			popMenu.dismiss();
    		else
    			showPopupMenu();
    		return true;
    	}
    	return super.onKeyDown(keyCode, event);
    }
    
    private void startActivitySafely(Intent intent) {
    	intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    	try {
    		startActivity(intent);
    	} catch (ActivityNotFoundException e) {
    	} catch (SecurityException e) {}
    }
    
    // 主界面 ImageButton 的 OnClick 事件
    class OnItemClickListenerMain implements OnItemClickListener{
		public void onItemClick(AdapterView<?> adapter, View view, int position,
				long arg3) {
			// 1,2,3  显示文件夹界面             0,4,5,6,7 显示音乐文件界面
			switch(position){
			case 1:		//歌手
				selectedButtonId = Constant.artistButtonSelected;
				updateView(TYPE_FOLDER);
				break;
			case 2:		//专辑
				selectedButtonId = Constant.albumButtonSelected;
				updateView(TYPE_FOLDER);
				break;
			case 3:		//文件夹
				selectedButtonId = Constant.folderButtonSelected;
				updateView(TYPE_FOLDER);
				break;
			
			/****************************************************/
			case 0:		//全部歌曲
				selectedButtonId = Constant.allMusicButtonSelected;
				updateView(TYPE_MUSIC);
				break;
			case 4:		//我的最爱
				try {
					selectedButtonId = Constant.favritorButtonSelected;
					updateView(TYPE_MUSIC);
				} catch (Exception e) { e.printStackTrace();}
				break;
			case 5:		//最近添加
				mainPref.saveAdd(musicBiz.getRecentAddMusic().size());
				selectedButtonId = Constant.recentAddButtonSelected;
				updateView(TYPE_MUSIC);
				break;
			case 6:		//下载管理
				mainPref.saveDownload(musicDao.getMusic(Constant.BASE_DOWNLOAD_PATH.
						substring(0,Constant.BASE_DOWNLOAD_PATH.length()-1)).size());
				selectedButtonId = Constant.downloadButtonSelected;
				updateView(TYPE_MUSIC);
				break;
			default:
				break;
			}
		}
    }
    
    // 文件夹界面的Item被单击
    class OnItemClickListenerFolder implements OnItemClickListener{
    	public void onItemClick(AdapterView<?> listView, View view, int position,
    			long id) {
    		MusicFolder folder = (MusicFolder)(folderAdapter.getItem(position));
    		// 区分是文件夹、artist、album
    		if("artist".equals(folder.getPath())){
    			musics = musicDao.getMusicsByArtist(folder.getName());
    		}else if("album".equals(folder.getPath())){
    			musics = musicDao.getMusicsByAlbumId(folder.getId());
    		}else{
    			musics = musicDao.getMusic(folder.getPath());
    		}
    		selectedButtonId = Constant.musicFolderSelected;
//    		Log.i("info", "size of musics:" musics.size());
			updateView(TYPE_MUSIC);
    	}
    }
    
    // 音乐文件被单击
    class OnItemClickListenerMusic implements OnItemClickListener{
		public void onItemClick(AdapterView<?> adapter, View view, int position,long id) {
			MyApplication.getInstance().setMusicList(musics);
//			Log.i("info", "after setMusicList(), the size in Main and App is:" musics.size() ";" MyApplication.musicList.size());
//			for(Music music : MyApplication.musicList){
//				Log.i("info", "music title--" music.getTitle());
//			}
			MyApplication.setCurrentPosition(position);
			sendBroadcast(new Intent(Constant.ACTION_PLAY));
			// 这里要添加改变item的操作
			// 根据设置决定是否跳转到播放界面
			if(MyApplication.defaultPref.getBoolean("switch_playing_interface", false)){
				Intent intent = new Intent(MainActivity.this,MusicPlayActivity.class);
				startActivity(intent);
				overridePendingTransition(R.anim.right_in, R.anim.left_out);
			}
			musicAdapter.notifyDataSetChanged();
		}
    }
    
    // netMusic item被单击
    private NetMusic currentNetMusic;
    class OnItemClickListenerNetMusic implements OnItemClickListener{
		public void onItemClick(AdapterView<?> arg0, View arg1, int position,long id) {
			currentNetMusic = (NetMusic)netMusicAdapter.getItem(position);
			// 如果该文件已存在,则发送消息会主线程并结束本次下载
			String musicPath = currentNetMusic.getMusicPath();
			String savePath = Constant.BASE_DOWNLOAD_PATH   musicPath.substring(musicPath.lastIndexOf("/") 1);
			// 如果已下载则直接播放
			if (new File(savePath).exists()) {
				try{
					MyApplication.mediaPlayer.reset();
					MyApplication.mediaPlayer.setDataSource(savePath);
					MyApplication.mediaPlayer.prepare();
					MyApplication.mediaPlayer.start();
					MyApplication.currentMusic = musicDao.getMusicByPath(savePath);
					sendBroadcast(new Intent(Constant.ACTION_MUSIC_CHANGED));
				}catch(Exception e){}
			}else
				showDialog(DIALOG_NET_MUSIC_CONFIRM);
		}
    }
    
    // netMusic item被长按
    class OnItemLongClickListenerNetMusic implements OnItemLongClickListener{
		public boolean onItemLongClick(AdapterView<?> arg0, View arg1,int position, long id) {
			currentNetMusic = (NetMusic)netMusicAdapter.getItem(position-1);
			showDialog(DIALOG_NET_MUSIC_OP);
			return true;
		}
    }
    
    // music item 被长按
    class OnItemLongClickListenerMusic implements OnItemLongClickListener{
		public boolean onItemLongClick(AdapterView<?> arg0, View arg1,int position, long id) {
			selMusic = (Music)musicAdapter.getItem(position);
			showDialog(DIALOG_MUSIC);
			return true;
		}
    }
    // 歌曲详情
    private class OnClickListenerMusicDetail implements OnClickListener{
		public void onClick(View v) {
			showDialog(DIALOG_MUEIC_DETAIL);
			dismissDialog(DIALOG_MUSIC);
    		removeDialog(DIALOG_MUSIC);
		}
    }
    // 将歌曲设为最爱
    private class OnClickListenerMusicLove implements OnClickListener{
    	public void onClick(View v) {
    		// 保存最爱
    		Toast.makeText(MainActivity.this, "已设为最爱", Toast.LENGTH_SHORT).show();
    		new Thread(){
    			public void run() {
    				try {
    					ArrayList<Music> musics;
						musics = FavMusicXmlUtil.getFavMusic();
						if(musics.contains(selMusic))
							return;
						musics.add(selMusic);
						FavMusicXmlUtil.saveFavMusic(musics);
						mainPref.saveFav(musics.size());
					} catch (Exception e) {
						e.printStackTrace();
					}
    			};
    		}.start();
    		dismissDialog(DIALOG_MUSIC);
    		removeDialog(DIALOG_MUSIC);
    	}
    }
    // 移除歌曲
    private class OnClickListenerMusicRemove implements OnClickListener{
    	public void onClick(View v) {
    		musicDao.deleteMusic(selMusic.getId());
    		dismissDialog(DIALOG_MUSIC);
    		removeDialog(DIALOG_MUSIC);
    		musics.remove(selMusic);
    		musicAdapter.notifyDataSetChanged();
    	}
    }
    // 修改歌曲信息
    private class OnClickListenerMusicUpdate implements OnClickListener{
    	public void onClick(View v) {
    		showDialog(DIALOG_MUEIC_EDIT);
    		dismissDialog(DIALOG_MUSIC);
    		removeDialog(DIALOG_MUSIC);
    	}
    }
    // 取消按钮
    private class OnClickListenerMusicCancel implements OnClickListener{
    	public void onClick(View v) {
    		dismissDialog(DIALOG_MUSIC);
    		removeDialog(DIALOG_MUSIC);
    	}
    }
    
    private int seekProgress = 0;
    private static final int startAnim = 0;
    private static final int stopAnim = 1;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main);
        MyApplication.getInstance().addActivity(this);
        
     // 处理消息
        handler = new Handler(){
        	public void handleMessage(Message msg) {
        		int i = 0;
        		switch(msg.what){
        		// 快进
        		case Constant.SEEK_UPDATE_NEXT:
        			i = msg.getData().getInt("text");
        			if(i == 1){
        				seekProgress = MyApplication.mediaPlayer.getCurrentPosition();
//        				Log.i("info", "快进前,进度是" seekProgress);
        			}
        			seekProgress = (seekProgress   i*200) > MyApplication.getMusicDuration() ? MyApplication.getMusicDuration() : (seekProgress   i*200);
        			musicProgressMain.setProgress(seekProgress*1000/MyApplication.getMusicDuration());
        			break;
        		// 快退
        		case Constant.SEEK_UPDATE_PRE:
        			i = msg.getData().getInt("text");
        			if(i == 1){
        				seekProgress = MyApplication.mediaPlayer.getCurrentPosition();
//        				Log.i("info", "快退前,进度是" seekProgress);
        			}
        			seekProgress = (seekProgress - i*200) < 0 ? 0 : (seekProgress - i*200);
        			musicProgressMain.setProgress(seekProgress*1000/MyApplication.getMusicDuration());
        			break;
        		case Constant.NET_MUSIC_LOADING:
        			// 0表示开始动画
        			if(msg.arg1 == startAnim){
        				ivNetMusicLoading.setVisibility(1);
        				ivNetMusicLoading.startAnimation(AnimationUtils.
        						loadAnimation(MainActivity.this, R.anim.loading));
        			}else{
        				ivNetMusicLoading.setVisibility(-1);
        				ivNetMusicLoading.clearAnimation();
        			}
        			break;
        		// 搜索歌曲
        		case Constant.MUSIC_LIST_SEARCH:
        			String searchStr = String.valueOf(msg.obj);
        			musics = musicDao.getAllMusic();
    				vpContainer.setCurrentItem(VP_MUSICLIST);
					ArrayList<Music> musicList = new ArrayList<Music>();
					for(int j=0;j<musics.size();j  ){
						if(musics.get(j).getTitle().toLowerCase().contains(searchStr) || 
								musics.get(j).getArtist().toLowerCase().contains(searchStr)){
							musicList.add(musics.get(j));
						}
					}
					musics = musicList;
					musicAdapter.changeData(musicList);
        			break;
        		// 搜索在线歌曲
        		case Constant.NET_MUSIC_SEARCH:
        			Log.i("info", "更新网络界面");
        			int size = baiduMp3Infos.size();
        			Log.i("info", "size:" size);
        			try{
	        			if(size > 0){
	        				/**
	        				 * 将将 BaiduMp3 伪装成  NetMusic后,
	        				 * 使用同样的适配器去显示
	        				 */
	        				ArrayList<NetMusic> netMusics = BaiduMp3Util.turnBaiduMp3ToNetMusic(baiduMp3Infos);
	        				netMusicAdapter.changeData(netMusics);
	        			}
	        		}catch(Exception e){}
        			break;
        		}
        		super.handleMessage(msg);
        	}
        };
        
        initData();
        initView();
        initListener();
        vpAdapter = new MyPagerAdapter(vpViews);
        vpContainer.setAdapter(vpAdapter);
        
    }
    
    private MyReciever reciever;
    @Override
    protected void onStart() {
    	super.onStart();
    }
    
    @Override
    protected void onResume() {
    	layout.setBackgroundResource(MyApplication.getWallpaperId());
    	reciever = new MyReciever();
    	IntentFilter filter = new IntentFilter();
		filter.addAction(Constant.ACTION_MEDIAPLAYER_INFO);
		filter.addAction(Constant.ACTION_MUSIC_CHANGED);
		filter.addAction(Constant.ACTION_STATUS_CHANGED);
		filter.addAction(Constant.ACTION_UPDATE_NETMUEIC_VIEW);
		filter.addAction(Constant.ACTION_NET_MUSIC_BUFFERING);
//		filter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);
		registerReceiver(reciever, filter);
		
		IntentFilter filter2 = new IntentFilter();
		filter2.addAction(Intent.ACTION_MEDIA_SCANNER_STARTED);
		filter2.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);
		filter2.addDataScheme("file");
		registerReceiver(reciever, filter2);
		
    	musics = MyApplication.getInstance().getmusicList();
    	updateView();
//    	Log.i("info", "MainActivity--onResume()--musics size:" musics.size());
    	// 如果是播放界面启动,则跳转到当前列表界面
    	if(MyApplication.showList == true){
    		MyApplication.showList = false;
    		musicAdapter.changeData(musics);
    		vpContainer.setCurrentItem(VP_MUSICLIST,true);
    		// 跳转到当前在播放的歌曲
    		if(MyApplication.getCurrentPosition() < musicAdapter.getCount())
    			this.listViewMusic.setSelection(MyApplication.getCurrentPosition());
    	}
    	super.onResume();
    }
    
    @Override
    protected void onPause() {
//    	Log.i("info", "MainActivity--onPause()");
    	this.unregisterReceiver(reciever);
    	super.onPause();
    }
    
    @Override
    protected void onStop() {
//    	Log.i("info", "MainActivity--onStop()");
    	super.onStop();
    }
    
    @Override
    protected void onRestart() {
//    	Log.i("info", "onRestart()");
//    	Log.i("info", "MainActivity--onRestart()--musics size:" musics.size());
    	super.onRestart();
    }
    
    @Override
    protected void onDestroy() {
    	if(netMusicAdapter != null)
    		netMusicAdapter.quit();
    	Intent intent = new Intent(Constant.ACTION_DESTORY);
		MainActivity.this.sendBroadcast(intent);
		popMenu.dismiss();

		MyApplication.musicPref.savePosition(MyApplication.currentPosition);
		MyApplication.musicPref.saveProgress(MyApplication.getMusicProgress());
		MyApplication.musicPref.saveData(MyApplication.getMusicData());
		MyApplication.musicPref.savePlayMode(MyApplication.playMode);
		MyApplication.getInstance().exit();
//		Log.i("info", "保存进度");
    	super.onDestroy();
    }
    
    private void showPopupMenu() {
		this.popMenu.dismiss();
		this.popMenu.showAtLocation(listViewFolder, Gravity.BOTTOM,0, 0);
	}
    
    private Timer sleepTimer;
    private boolean isSleepOpened = false;
    private int sleepTime;
    private String[] playModeEntries = new String[4];
	private class PopupBodyOnItemClickListenerCallback implements OnItemClickListener {
		public void onItemClick(AdapterView<?> parent, View view, int position,
				long id) {
//			Log.i("info", "" position);
			// 0-3:设置、睡眠、换肤、退出          4-7:播放模式、更新列表、查找、关于
			switch(position){
			case 0:
				startActivity(new Intent(MainActivity.this,SettingScreen.class));
				break;
			case 1:
				// 设置可以启动和关闭睡眠模式
				if(!isSleepOpened){
					final View sleepView = inflater.inflate(R.layout.sleep_dialog, null);
					final EditText et = (EditText)sleepView.findViewById(R.id.et_sleep_text);
					et.setText("" MyApplication.defaultPref.getInt("sleep_time", 15));
					Dialog dialog = new AlertDialog.Builder(MainActivity.this).setTitle("请输入睡眠时间(分钟)")
							.setIcon(R.drawable.ic_menu_sleep_mode_default)
							.setCancelable(true)
							.setView(sleepView)
							.setPositiveButton("确定", new DialogInterface.OnClickListener() {
								public void onClick(DialogInterface dialog, int which) {
									sleepTime = Integer.parseInt(et.getText().toString().trim());
									Editor edit = MyApplication.defaultPref.edit();
									edit.putInt("sleep_time", sleepTime).commit();
//									Log.i("info", "睡眠时间:" sleepTime);
									final long sleepTimeMillis = sleepTime*60*1000 System.currentTimeMillis();
									sleepTimer = new Timer();
									sleepTimer.schedule(new TimerTask() {
										public void run() {
//											Log.i("info", "一分钟过去了");
											if(System.currentTimeMillis() > sleepTimeMillis){
//												Log.i("info", "时间到,睡觉鸟!");
												sendBroadcast(new Intent(Constant.ACTION_START_SLEEP));
												MainActivity.this.finish();
												sleepTimer.cancel();
											}
										}
									}, 0, 60*1000);
									isSleepOpened = true;
									Toast.makeText(MainActivity.this, "亲,将在" sleepTime "分钟后启动睡眠模式!", Toast.LENGTH_SHORT).show();
								}
							}).setNegativeButton("取消",null)
							.create();
					dialog.show();
				}else{
					isSleepOpened = false;
					sleepTimer.cancel();
					Toast.makeText(MainActivity.this, "睡眠模式已取消", Toast.LENGTH_LONG).show();
				}
				break;
			case 2:
				startActivity(new Intent(MainActivity.this, SkinSetting.class));
				break;
			case 3:
				MyApplication.timer.cancel();
				MainActivity.this.sendBroadcast(new Intent(Constant.ACTION_START_SLEEP));
				MainActivity.this.finish();
				break;
			case 4:
				Dialog dialog = new AlertDialog.Builder(MainActivity.this)
				.setTitle("请选择播放模式")
				.setCancelable(true)
				.setNegativeButton("取消",null)
				.setSingleChoiceItems(playModeEntries, MyApplication.playMode - 1, new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int which) {
						int playModeTemp = which   1;
						MyApplication.playMode = playModeTemp;
						MyApplication.musicPref.savePlayMode(playModeTemp);
						dialog.dismiss();
					}
				}).create();
				dialog.show();
				break;
			case 5:		// 刷新列表
				Intent ii = new Intent(MainActivity.this, ScanMusicActivity.class);
				startActivity(ii);
				break;
			case 6:
				popupWindowSearch.showAtLocation(listViewMusic, Gravity.TOP,0, 35);
				break;
			case 7:
//				Intent i = new Intent(MainActivity.this, AboutActivity.class);
//				startActivity(i);
				
				Intent i = new Intent(MainActivity.this, AboutDialog.class);
				startActivity(i);
				break;
			}
			MainActivity.this.popMenu.dismiss();
		}
	}
	
    private class MyReciever extends BroadcastReceiver {
		@Override
		public void onReceive(Context context, Intent intent) {
			// 收到更新进度条的信息
			if(Constant.ACTION_MEDIAPLAYER_INFO.equals(intent.getAction())){
				int currentTime = intent.getIntExtra("musicProgress", 0);
				if(!seeking){
					musicProgressMain.setProgress(currentTime*1000/MyApplication.getMusicDuration());
				}
			}else if(Constant.ACTION_MUSIC_CHANGED.equals(intent.getAction())){
				controlPanelTitleMain.setText(MyApplication.getMusicTitle());
				controlPanelArtistMain.setText(MyApplication.getMusicArtist());
				musicAdapter.notifyDataSetChanged();
			}else if(Constant.ACTION_STATUS_CHANGED.equals(intent.getAction())){
				updateView();
			}else if(Constant.ACTION_UPDATE_NETMUEIC_VIEW.equals(intent.getAction())){
				downloadMusicName = intent.getStringExtra("name");
				Toast.makeText(MainActivity.this, downloadMusicName "下载完成", Toast.LENGTH_LONG).show();
				mainPref.saveDownload(DownloadMusicUtil.getDownloadMusicsCount());
				Uri uri = Uri.parse("file://"   Environment.getExternalStorageDirectory()
						.getAbsolutePath());
				Intent i = new Intent(Intent.ACTION_MEDIA_MOUNTED, uri);
				sendBroadcast(i);
				if(netMusicAdapter != null)
					netMusicAdapter.notifyDataSetChanged();
			}else if(Constant.ACTION_NET_MUSIC_BUFFERING.equals(intent.getAction())){
				Message msg = handler.obtainMessage();
				msg.what = Constant.NET_MUSIC_LOADING;
				msg.arg1  = stopAnim;
				handler.sendMessage(msg);
			}else if(Intent.ACTION_MEDIA_SCANNER_FINISHED.equals(intent.getAction())){
				String _data = Constant.BASE_DOWNLOAD_PATH downloadMusicName;
				try{
					Music music = musicBiz.getMusicByData(_data);
					musicDao.insertMusic(music);
				}catch(Exception e){}
			}
		}
	}
    
    private String downloadMusicName;
    private void updateView(){
		controlPanelTitleMain.setText(MyApplication.getMusicTitle());
		controlPanelArtistMain.setText(MyApplication.getMusicArtist());
    	musicProgressMain.setProgress(MyApplication.getMusicProgress()*1000/MyApplication.getMusicDuration());
		// 更新播放按钮状态
    	if(MyApplication.status == Constant.STATUS_PLAYING)
			btnPlay.setImageResource(R.drawable.control_pause);
		else
			btnPlay.setImageResource(R.drawable.control_play);
		// 更新专辑图片
    	String str = AlbumPicUtil.getAlbumArt(MainActivity.this,"" MyApplication.getMusicAlbumId());
		if(str == null)
			ivAlbum.setImageResource(R.drawable.album_default);
		else{
			Bitmap bmp = BitmapService.getBitmap(str, 90, 90);
			if(bmp == null)
				ivAlbum.setImageResource(R.drawable.album_default);
			else
				ivAlbum.setImageBitmap(bmp);
		}
		Intent intent = new Intent(Constant.ACTION_ALBUM_PIC_CHANGED);
		intent.putExtra("album_pic_path", str);
		sendBroadcast(intent);
    }
    
    private void doPlay(){
		Intent intent = new Intent();
		intent.setAction(Constant.ACTION_PLAY);
		MainActivity.this.sendBroadcast(intent);
//		Log.i("info", "MusicPlayActivity 发送 ACTION_PLAY 广播...");
	}
	private void doPlayPre(){
		Intent intent = new Intent();
		intent.setAction(Constant.ACTION_PREVIOUS);
		MainActivity.this.sendBroadcast(intent);
//		Log.i("info", "MusicPlayActivity 发送 ACTION_PREVIOUS 广播...");
	}
	private void doPlayNext(){
		Intent intent = new Intent();
		intent.setAction(Constant.ACTION_NEXT);
//		Log.i("info", "MusicPlayActivity 发送 ACTION_NEXT 广播...");
		MainActivity.this.sendBroadcast(intent);
	}
	
	private void setComps(int pageCount, int[] position){
		if(pageCount == 3){
			for(int i=0;i<pageCount;i  ){
//				Log.i("info", Thread.currentThread().getName());
//				Log.i("info", "comps:" comps[i].toString());
				if(position[i]==1)
					comps[i].setImageResource(R.drawable.p_day);
				else
					comps[i].setImageResource(R.drawable.p_night);
			}
		}else{
			for(int i=0;i<pageCount;i  ){
				if(position[i]==1)
					comps[i].setImageResource(R.drawable.p_day);
				else
					comps[i].setImageResource(R.drawable.p_night);
			}
		}
	}
	
	// 更新在线歌曲界面
	public void updateView(ArrayList<NetMusic> netMusics) {
		netMusicAdapter.changeData(netMusics);
		Message msg = handler.obtainMessage();
		msg.what = Constant.NET_MUSIC_LOADING;
		msg.arg1  = stopAnim;
		handler.sendMessage(msg);
	}

	/*
     * 托管对话框  	1、重写activity的两个方法: onCreateDialog(int id)、onPrepareDialog(int id,Dialog dialog)
 				2、在需要时调用:  showDialog(int id) 、dismissDialog(int id) 、removeDialog(int id)
     * */
    private static final int DIALOG_MUSIC = 1;
    private static final int DIALOG_MUEIC_DETAIL = 2;
    private static final int DIALOG_MUEIC_EDIT = 3;
    private static final int DIALOG_NET_MUSIC_CONFIRM = 4;
    private static final int DIALOG_NET_MUSIC_OP = 5;
    private Music selMusic;
    @Override
    protected Dialog onCreateDialog(int id) {
    	switch(id){
    	// 本地歌曲操作
    	case DIALOG_MUSIC:
    		View view = inflater.inflate(R.layout.music_dialog, null);
			// 设置按钮监听
			view.findViewById(R.id.btn_music_detail).setOnClickListener(new OnClickListenerMusicDetail());
			view.findViewById(R.id.btn_music_love).setOnClickListener(new OnClickListenerMusicLove());
			view.findViewById(R.id.btn_music_remove).setOnClickListener(new OnClickListenerMusicRemove());
			view.findViewById(R.id.btn_music_update).setOnClickListener(new OnClickListenerMusicUpdate());
			view.findViewById(R.id.btn_music_cancel).setOnClickListener(new OnClickListenerMusicCancel());
			// 创建对话框
			Dialog dialog = new AlertDialog.Builder(MainActivity.this)
				.setTitle(selMusic.getTitle())
				.setIcon(R.drawable.ic_menu_about_default)
				.setCancelable(true)
				.setView(view)
				.create();
    		return dialog;
    	// 查看歌曲详情对话框
    	case DIALOG_MUEIC_DETAIL:
    		View view1 = inflater.inflate(R.layout.music_dialog_detail, null);
    		((TextView)view1.findViewById(R.id.tv_music_detail_name)).setText("歌曲 : " selMusic.getTitle());
    		((TextView)view1.findViewById(R.id.tv_music_detail_album)).setText("专辑 : " selMusic.getAlbum());
    		((TextView)view1.findViewById(R.id.tv_music_detail_artist)).setText("歌手 : " selMusic.getArtist());
    		((TextView)view1.findViewById(R.id.tv_music_detail_path)).setText("路径 : " selMusic.getData());
    		((TextView)view1.findViewById(R.id.tv_music_detail_size)).setText("大小 : " TimeFormat.sizeFormat(selMusic.getSize()));
    		((TextView)view1.findViewById(R.id.tv_music_detail_duration)).setText("时长 : " TimeFormat.timeFormat(selMusic.getDuration()));
    		// 编辑歌曲信息
    		view1.findViewById(R.id.btn_music_detail_edit).setOnClickListener(new OnClickListener() {
				public void onClick(View v) {
					showDialog(DIALOG_MUEIC_EDIT);
					dismissDialog(DIALOG_MUEIC_DETAIL);
					removeDialog(DIALOG_MUEIC_DETAIL);
				}
			});
			view1.findViewById(R.id.btn_music_detail_cancel).setOnClickListener(new OnClickListener() {
				public void onClick(View v) {
					dismissDialog(DIALOG_MUEIC_DETAIL);
					removeDialog(DIALOG_MUEIC_DETAIL);
				}
			});
    		Dialog dialog1 = new AlertDialog.Builder(MainActivity.this)
			.setTitle(selMusic.getTitle())
			.setIcon(R.drawable.ic_menu_about_default)
			.setCancelable(true)
			.setView(view1)
			.create();
		return dialog1;
		// 编辑歌曲信息对话框
    	case DIALOG_MUEIC_EDIT:
    		View view2 = inflater.inflate(R.layout.music_dialog_edit, null);
    		final EditText etName = (EditText)view2.findViewById(R.id.et_music_detail_name);
    		final EditText etAlbum = (EditText)view2.findViewById(R.id.et_music_detail_album);
    		final EditText etArtist = (EditText)view2.findViewById(R.id.et_music_detail_artist);
    		etName.setText(selMusic.getTitle());
    		etAlbum.setText(selMusic.getAlbum());
    		etArtist.setText(selMusic.getArtist());
    		// 保存修改后的信息
    		view2.findViewById(R.id.btn_save_music_info).setOnClickListener(new OnClickListener() {
				public void onClick(View v) {
					selMusic.setTitle(etName.getText().toString());
					selMusic.setAlbum(etAlbum.getText().toString());
					selMusic.setArtist(etArtist.getText().toString());
					musicDao.updateMusic(selMusic);
					musicAdapter.notifyDataSetChanged();
					dismissDialog(DIALOG_MUEIC_EDIT);
					removeDialog(DIALOG_MUEIC_EDIT);
				}
			});
			view2.findViewById(R.id.btn_cancel_music_info).setOnClickListener(new OnClickListener() {
				public void onClick(View v) {
					dismissDialog(DIALOG_MUEIC_EDIT);
					removeDialog(DIALOG_MUEIC_EDIT);
				}
			});
    		Dialog dialog2 = new AlertDialog.Builder(MainActivity.this)
			.setCancelable(true)
			.setTitle(selMusic.getTitle())
			.setIcon(R.drawable.ic_menu_about_default)
			.setView(view2)
			.create();
    		return dialog2;
    	// 确认播放网络歌曲
    	case DIALOG_NET_MUSIC_CONFIRM:
    		Dialog dialog3 = new Builder(MainActivity.this).setTitle("确认")
    				.setIcon(android.R.drawable.ic_dialog_info)
    				.setCancelable(true)
    				.setMessage("确认播放网络歌曲吗?")
    				.setNegativeButton("取消", new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int which) {
							dismissDialog(DIALOG_NET_MUSIC_CONFIRM);
							removeDialog(DIALOG_NET_MUSIC_CONFIRM);
						}
					})
    				.setPositiveButton("确定", new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int which) {
							Intent intent = new Intent(Constant.ACTION_NET_PLAY);
							intent.putExtra("netMusic", currentNetMusic);
							sendBroadcast(intent);
							try{
								Music music = new Music();
								music.setAlbum(currentNetMusic.getAlbum());
								music.setArtist(currentNetMusic.getSinger());
								music.setDuration(TimeFormat.timeFormat(currentNetMusic.getDuration()));
								music.setTitle(currentNetMusic.getName());
								MyApplication.currentMusic = music;
							}catch(Exception e){}
							Message msg = handler.obtainMessage();
							msg.what = Constant.NET_MUSIC_LOADING;
							msg.arg1  = startAnim;
							handler.sendMessage(msg);
							Toast.makeText(MainActivity.this, "正在缓冲", Toast.LENGTH_LONG).show();
						}
					})
    				.create();
    		return dialog3;
    	// 对网络歌曲进行操作
    	case DIALOG_NET_MUSIC_OP:
    		View view3 = inflater.inflate(R.layout.dialog_net_music_op, null);
    		Button btnDetail = (Button)view3.findViewById(R.id.btn_net_music_detail);
    		Button btnDownload = (Button)view3.findViewById(R.id.btn_net_music_download);
    		btnDetail.setOnClickListener(new OnClickListener() {
				public void onClick(View v) {
					Dialog dialog5 = new AlertDialog.Builder(MainActivity.this).setIcon(android.R.drawable.ic_dialog_info)
							.setTitle("歌曲详情").setMessage(currentNetMusic.toString())
							.setCancelable(true)
							.setPositiveButton("确定", new DialogInterface.OnClickListener() {
								public void onClick(DialogInterface dialog, int which) {
									dialog.dismiss();
								}
							}).create();
					dialog5.show();
					dismissDialog(DIALOG_NET_MUSIC_OP);
					removeDialog(DIALOG_NET_MUSIC_OP);
				}
			});
    		btnDownload.setOnClickListener(new OnClickListener() {
				public void onClick(View v) {
					Toast.makeText(MainActivity.this, "开始下载", Toast.LENGTH_LONG).show();
					String uri = HttpService.BASE_URL   currentNetMusic.getMusicPath();
					Intent intent = new Intent(MainActivity.this,MusicDownloadService.class);
					intent.putExtra("uri", uri);
					startService(intent);
					dismissDialog(DIALOG_NET_MUSIC_OP);
					removeDialog(DIALOG_NET_MUSIC_OP);
				}
			});
    		Dialog dialog4 = new Builder(MainActivity.this)
    				.setIcon(android.R.drawable.ic_dialog_info)
    				.setCancelable(true).setTitle("操作")
    				.setView(view3)
    				.setNegativeButton("返回", new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int which) {
							dismissDialog(DIALOG_NET_MUSIC_OP);
							removeDialog(DIALOG_NET_MUSIC_OP);
						}
					})
    				.create();
    		return dialog4;
    	}
    	return super.onCreateDialog(id);
    }
    
    @Override
    protected void onPrepareDialog(int id, Dialog dialog) {
    	super.onPrepareDialog(id, dialog);
    }
    
    /**
     * 网络歌曲搜索按钮事件监听
     * @author ARIST
     */
    private boolean searchThreadRunning = false;
    private ArrayList<BaiduMp3> baiduMp3Infos = new ArrayList<BaiduMp3>();
    private class btnNetMusicSearchOnClickListener implements OnClickListener{
		public void onClick(View v) {
			final String text = etNetMusicSearch.getText().toString();
			if(text == null || "".equals(text.trim()))
				return ;
			// 正在搜索,不能重复
			if(searchThreadRunning)
				return ;
			new Thread(){
	        	public void run() {
	        		searchThreadRunning = true;
	        		Log.i("info", "run");
        			try {
        				Message msg = handler.obtainMessage();
        				msg.what = Constant.NET_MUSIC_LOADING;
        				msg.arg1 = startAnim;
        				handler.sendMessage(msg);
						baiduMp3Infos = BaiduMp3Util.getBaiduMp3ByKeyWord(text);
					} catch (Exception e) {
						e.printStackTrace();
					}
        			// 发消息取消动画
        			Message msg = handler.obtainMessage();
        			msg.what = Constant.NET_MUSIC_LOADING;
        			msg.arg1  = stopAnim;
        			handler.sendMessage(msg);
	        		// 发消息开始更新界面
	        		handler.sendMessage(handler.obtainMessage(Constant.NET_MUSIC_SEARCH));
	        		
	        		searchThreadRunning = false;
	        	};
	        }.start();
		}
    }
    
}













实例下载地址

android 音乐播放器源码

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警