`
runfeel
  • 浏览: 899405 次
文章分类
社区版块
存档分类
最新评论

Android应用--简、美音乐播放器原型放送(作者:小巫)

 
阅读更多

Android应用--简、美音乐播放器原型放送


2013年7月5日简、美音乐播放器开发


前言:小巫的简、美音乐播放器从5月7号开始开发,之前以为时间很充足,也没有估量整个软件的需求,如果简单实现基本的操作的话,确实可以在一个星期内把一个简单的音乐播放器给开发出来。不过我增加了很多特性,比如歌词的显示,专辑封面的显示,界面的左右切换,倒影效果实现等,让整个音乐播放器添色很多,与我之前想开发出操作简单,界面漂亮的想法一致,这是另我比较开心的。到目前为止实现了以下功能:
第1阶段完成的功能:

1.自动显示音乐列表
2.点击列表播放音乐
3.长按列表弹出对话框
4.暂停音乐
5.上一首音乐
6.下一首音乐
7.自动播放下一首歌曲
8.单曲循环
9.全部循环
10. 随机播放

第2阶段已完成的功能:
1. 歌词显示(实现歌词滚动功能)
2. 来电监听
3. 控制音量
4. 获取专辑图片

5.界面美化--实现专辑倒影
6. 实现左右界面切换

7. 实现对话框里列表(播放音乐、设为铃声、查看信息)项点击功能

第2阶段还未实现的功能

8. 实现有趣功能--甩歌

9. 在线下载歌词
10. 在线搜索音乐
11. 在线下载音乐

12.实现在通知栏显示播放状态
13.实现音乐播放的桌面小控件


这篇博客要介绍的内容是第2阶段的第7个功能实现,完成这个功能之后,基本上这个播放器已经是功能完备的原型了。我知道你们已经等不及想要源码了,我就满足大家一上来就要源码的愿望,下面是我的资源链接,我可能也会把它开源到gitHub里,不过要等我弄清楚,怎么把它弄上gitHub.

http://download.csdn.net/detail/wwj_748/5709199


骚年们,感谢你们的支持,虽然不认识你们,能来看小巫的的博客就是我的荣幸,不过麻烦顶一下,或者踩一下也好啊。最重要,最重要的是你们能不能给点评论,我哪里不好就请你们给我指出来,不然我怎么知道怎么改。谢谢哈。



好啦,来看看整个软件的全貌吧:


以上就是简、美音乐播放器的全貌,是不是感觉蛮简美的哈。

下面是实现第二阶段功能的代码:
算了,我直接把整个Activity的代码贴出来,里面的代码也有做相应的修改的。不过你们直接看源码就好了。
/SimpleBeautyMusicPlayer/src/com/wwj/sb/activity/HomeActivity.java
package com.wwj.sb.activity;

import java.io.File;
import java.util.List;


import android.app.Activity;
import android.app.AlertDialog;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Vibrator;
import android.provider.MediaStore;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnCreateContextMenuListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;

import com.wwj.sb.adapter.MusicListAdapter;
import com.wwj.sb.domain.AppConstant;
import com.wwj.sb.domain.Contsant;
import com.wwj.sb.domain.Mp3Info;
import com.wwj.sb.service.PlayerService;
import com.wwj.sb.utils.ConstantUtil;
import com.wwj.sb.utils.CustomDialog;
import com.wwj.sb.utils.MediaUtil;

/**
 * 2013/5/7
 * 简、美音乐播放器
 * @author wwj
 * 
 */
public class HomeActivity extends Activity {
	private ListView mMusiclist; // 音乐列表
	private List<Mp3Info> mp3Infos = null;
//	private SimpleAdapter mAdapter; // 简单适配器
	MusicListAdapter listAdapter;	//改为自定义列表适配器
	private Button previousBtn; // 上一首
	private Button repeatBtn; // 重复(单曲循环、全部循环)
	private Button playBtn; // 播放(播放、暂停)
	private Button shuffleBtn; // 随机播放
	private Button nextBtn; // 下一首
	private TextView musicTitle;//歌曲标题
	private TextView musicDuration;	//歌曲时间
	private Button musicPlaying;	//歌曲专辑
	private ImageView musicAlbum;	//专辑封面

	private int repeatState;		//循环标识
	private final int isCurrentRepeat = 1; // 单曲循环
	private final int isAllRepeat = 2; // 全部循环
	private final int isNoneRepeat = 3; // 无重复播放
	private boolean isFirstTime = true; 
	private boolean isPlaying; // 正在播放
	private boolean isPause; // 暂停
	private boolean isNoneShuffle = true; // 顺序播放
	private boolean isShuffle = false; // 随机播放
	
	
	private int listPosition = 0;	//标识列表位置
	private HomeReceiver homeReceiver;	//自定义的广播接收器
	//一系列动作
	public static final String UPDATE_ACTION = "com.wwj.action.UPDATE_ACTION";		//更新动作
	public static final String CTL_ACTION = "com.wwj.action.CTL_ACTION";			//控制动作
	public static final String MUSIC_CURRENT = "com.wwj.action.MUSIC_CURRENT";		//当前音乐改变动作
	public static final String MUSIC_DURATION = "com.wwj.action.MUSIC_DURATION";	//音乐时长改变动作
	public static final String REPEAT_ACTION = "com.wwj.action.REPEAT_ACTION";		//音乐重复改变动作
	public static final String SHUFFLE_ACTION = "com.wwj.action.SHUFFLE_ACTION";	//音乐随机播放动作
	
	
	private int currentTime;	//当前时间
	private int duration;		//时长
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.home_activity_layout);

		mMusiclist = (ListView) findViewById(R.id.music_list);
		mMusiclist.setOnItemClickListener(new MusicListItemClickListener());
		mMusiclist.setOnCreateContextMenuListener(new MusicListItemContextMenuListener());
		mp3Infos = MediaUtil.getMp3Infos(HomeActivity.this);	//获取歌曲对象集合
//		setListAdpter(MediaUtil.getMusicMaps(mp3Infos));	//显示歌曲列表
		listAdapter = new MusicListAdapter(this,mp3Infos);
		mMusiclist.setAdapter(listAdapter);
		findViewById();				//找到界面上的每一个控件
		setViewOnclickListener();	//为一些控件设置监听器
		repeatState = isNoneRepeat; // 初始状态为无重复播放状态
		
		
		homeReceiver = new HomeReceiver();
		// 创建IntentFilter
		IntentFilter filter = new IntentFilter();
		// 指定BroadcastReceiver监听的Action
		filter.addAction(UPDATE_ACTION);
		filter.addAction(MUSIC_CURRENT);
		filter.addAction(MUSIC_DURATION);
		filter.addAction(REPEAT_ACTION);
		filter.addAction(SHUFFLE_ACTION);
		// 注册BroadcastReceiver
		registerReceiver(homeReceiver, filter);
		

	}

	/**
	 * 从界面上根据id获取按钮
	 */
	private void findViewById() {
		previousBtn = (Button) findViewById(R.id.previous_music);
		repeatBtn = (Button) findViewById(R.id.repeat_music);
		playBtn = (Button) findViewById(R.id.play_music);
		shuffleBtn = (Button) findViewById(R.id.shuffle_music);
		nextBtn = (Button) findViewById(R.id.next_music);
		musicTitle = (TextView) findViewById(R.id.music_title);
		musicDuration = (TextView) findViewById(R.id.music_duration);
		musicPlaying = (Button) findViewById(R.id.playing);
		musicAlbum = (ImageView) findViewById(R.id.music_album);
	}

	/**
	 * 给每一个按钮设置监听器
	 */
	private void setViewOnclickListener() {
		ViewOnClickListener viewOnClickListener = new ViewOnClickListener();
		previousBtn.setOnClickListener(viewOnClickListener);
		repeatBtn.setOnClickListener(viewOnClickListener);
		playBtn.setOnClickListener(viewOnClickListener);
		shuffleBtn.setOnClickListener(viewOnClickListener);
		nextBtn.setOnClickListener(viewOnClickListener);
		musicPlaying.setOnClickListener(viewOnClickListener);
	}

	/**
	 * 控件的监听器
	 * @author Administrator
	 *
	 */
	private class ViewOnClickListener implements OnClickListener {
		Intent intent = new Intent();
		@Override
		public void onClick(View v) {
			switch (v.getId()) {
			case R.id.previous_music: // 上一首
				playBtn.setBackgroundResource(R.drawable.play_selector);
				isFirstTime = false;
				isPlaying = true;
				isPause = false;
				previous();
				break;
			case R.id.repeat_music: // 重复播放
				if (repeatState == isNoneRepeat) {
					repeat_one();
					shuffleBtn.setClickable(false);
					repeatState = isCurrentRepeat;
				} else if (repeatState == isCurrentRepeat) {
					repeat_all();
					shuffleBtn.setClickable(false);
					repeatState = isAllRepeat;
				} else if (repeatState == isAllRepeat) {
					repeat_none();
					shuffleBtn.setClickable(true);
					repeatState = isNoneRepeat;
				}
				switch (repeatState) {
				case isCurrentRepeat: // 单曲循环
					repeatBtn
							.setBackgroundResource(R.drawable.repeat_current_selector);
					Toast.makeText(HomeActivity.this, R.string.repeat_current,
							Toast.LENGTH_SHORT).show();
					break;
				case isAllRepeat: // 全部循环
					repeatBtn
							.setBackgroundResource(R.drawable.repeat_all_selector);
					Toast.makeText(HomeActivity.this, R.string.repeat_all,
							Toast.LENGTH_SHORT).show();
					break;
				case isNoneRepeat: // 无重复
					repeatBtn
							.setBackgroundResource(R.drawable.repeat_none_selector);
					Toast.makeText(HomeActivity.this, R.string.repeat_none,
							Toast.LENGTH_SHORT).show();
					break;
				}

				break;
			case R.id.play_music: // 播放音乐
				if(isFirstTime) {
					play();
					isFirstTime = false;
					isPlaying = true;
					isPause = false;
				} else {
					if (isPlaying) {
						playBtn.setBackgroundResource(R.drawable.pause_selector);
						intent.setAction("com.wwj.media.MUSIC_SERVICE");
						intent.putExtra("MSG", AppConstant.PlayerMsg.PAUSE_MSG);
						startService(intent);
						isPlaying = false;
						isPause = true;
						
					} else if (isPause) {
						playBtn.setBackgroundResource(R.drawable.play_selector);
						intent.setAction("com.wwj.media.MUSIC_SERVICE");
						intent.putExtra("MSG", AppConstant.PlayerMsg.CONTINUE_MSG);
						startService(intent);
						isPause = false;
						isPlaying = true;
					}
				}
				break;
			case R.id.shuffle_music: // 随机播放
				if (isNoneShuffle) {
					shuffleBtn
							.setBackgroundResource(R.drawable.shuffle_selector);
					Toast.makeText(HomeActivity.this, R.string.shuffle,
							Toast.LENGTH_SHORT).show();
					isNoneShuffle = false;
					isShuffle = true;
					shuffleMusic();
					repeatBtn.setClickable(false);
				} else if (isShuffle) {
					shuffleBtn
							.setBackgroundResource(R.drawable.shuffle_none_selector);
					Toast.makeText(HomeActivity.this, R.string.shuffle_none,
							Toast.LENGTH_SHORT).show();
					isShuffle = false;
					isNoneShuffle = true;
					repeatBtn.setClickable(true);
				}
				break;
			case R.id.next_music: // 下一首
				playBtn.setBackgroundResource(R.drawable.play_selector);
				isFirstTime = false;
				isPlaying = true;
				isPause = false;
				next();
				break;
			case R.id.playing:	//正在播放
				Mp3Info mp3Info = mp3Infos.get(listPosition);
				Intent intent = new Intent(HomeActivity.this, PlayerActivity.class);
				intent.putExtra("title", mp3Info.getTitle());	
				intent.putExtra("url", mp3Info.getUrl());
				intent.putExtra("artist", mp3Info.getArtist());
				intent.putExtra("listPosition", listPosition);
				intent.putExtra("currentTime", currentTime);
				intent.putExtra("duration", duration);
				intent.putExtra("MSG", AppConstant.PlayerMsg.PLAYING_MSG);
				startActivity(intent);
				break;
			}
		}
	}

	/**
	 * 列表点击监听器
	 * @author wwj
	 *
	 */
	private class MusicListItemClickListener implements OnItemClickListener {
		/**
		 * 点击列表播放音乐
		 */
		@Override
		public void onItemClick(AdapterView<?> parent, View view, int position,
				long id) {
			listPosition = position;	//获取列表点击的位置
			playMusic(listPosition);	//播放音乐	
		}

	}
	
	/**
	 * 上下文菜单显示监听器
	 * @author Administrator
	 *
	 */
	public class MusicListItemContextMenuListener implements OnCreateContextMenuListener {

		@Override
		public void onCreateContextMenu(ContextMenu menu, View v,
				ContextMenuInfo menuInfo) {
			Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE);
			vibrator.vibrate(50); 		//长按振动
			musicListItemDialog();		//长按后弹出的对话框
			final AdapterView.AdapterContextMenuInfo menuInfo2 = (AdapterView.AdapterContextMenuInfo) menuInfo;
			listPosition = menuInfo2.position;	//点击列表的位置
		}

	}

	/**
	 * 填充列表
	 * 
	 * @param mp3Infos
	 */
//	public void setListAdpter(List<HashMap<String, String>> mp3list) {
//		mAdapter = new SimpleAdapter(this, mp3list,
//				R.layout.music_list_item_layout, new String[] {"title",
//						"Artist", "duration" }, new int[] {R.id.music_title,
//						R.id.music_Artist, R.id.music_duration });
////		mMusiclist.setAdapter(mAdapter);
//		
//	}
	
	
	/**
	 * 下一首歌曲
	 */
	public void next() {
		listPosition = listPosition + 1;
		if(listPosition <= mp3Infos.size() - 1) {
			Mp3Info mp3Info = mp3Infos.get(listPosition);
			musicTitle.setText(mp3Info.getTitle());
			Intent intent = new Intent();
			intent.setAction("com.wwj.media.MUSIC_SERVICE");
			intent.putExtra("listPosition", listPosition);
			intent.putExtra("url", mp3Info.getUrl());
			intent.putExtra("MSG", AppConstant.PlayerMsg.NEXT_MSG);
			startService(intent);
		} else {
			listPosition = mp3Infos.size() - 1;
			Toast.makeText(HomeActivity.this, "没有下一首了", Toast.LENGTH_SHORT).show();
		}
	}

	/**
	 * 上一首歌曲
	 */
	public void previous() {
		listPosition = listPosition - 1;
		if(listPosition >= 0) {
			Mp3Info mp3Info = mp3Infos.get(listPosition);
			musicTitle.setText(mp3Info.getTitle());
			Intent intent = new Intent();
			intent.setAction("com.wwj.media.MUSIC_SERVICE");
			intent.putExtra("listPosition", listPosition);
			intent.putExtra("url", mp3Info.getUrl());
			intent.putExtra("MSG", AppConstant.PlayerMsg.PRIVIOUS_MSG);
			startService(intent);
		}else {
			listPosition = 0;
			Toast.makeText(HomeActivity.this, "没有上一首了", Toast.LENGTH_SHORT).show();
		}
	}

	/**
	 * 播放音乐
	 */
	public void play() {
		playBtn.setBackgroundResource(R.drawable.play_selector);
		Mp3Info mp3Info = mp3Infos.get(listPosition);
		musicTitle.setText(mp3Info.getTitle());
		Intent intent = new Intent();
		intent.setAction("com.wwj.media.MUSIC_SERVICE");
		intent.putExtra("listPosition", 0);
		intent.putExtra("url", mp3Info.getUrl());
		intent.putExtra("MSG", AppConstant.PlayerMsg.PLAY_MSG);
		startService(intent);
	}
	
	/**
	 * 单曲循环
	 */
	public void repeat_one() {
		Intent intent = new Intent(CTL_ACTION);
		intent.putExtra("control", 1);
		sendBroadcast(intent);
	}
	
	/**
	 * 全部循环
	 */
	public void repeat_all() {
		Intent intent = new Intent(CTL_ACTION);
		intent.putExtra("control", 2);
		sendBroadcast(intent);
	}

	/**
	 * 顺序播放
	 */
	public void repeat_none() {
		Intent intent = new Intent(CTL_ACTION);
		intent.putExtra("control", 3);
		sendBroadcast(intent);
	}
	
	/**
	 * 随机播放
	 */
	public void shuffleMusic() {
		Intent intent = new Intent(CTL_ACTION);
		intent.putExtra("control", 4);
		sendBroadcast(intent);
	}

	/**
	 * 自定义对话框
	 */
	public void musicListItemDialog() {
		String[] menuItems = new String[]{"播放音乐","设为铃声","查看详情"};
		ListView menuList = new ListView(HomeActivity.this);
		menuList.setCacheColorHint(Color.TRANSPARENT);
		menuList.setDividerHeight(1);
		menuList.setAdapter(new ArrayAdapter<String>(HomeActivity.this, R.layout.context_dialog_layout, R.id.dialogText, menuItems));
		menuList.setLayoutParams(new LayoutParams(ConstantUtil.getScreen(HomeActivity.this)[0] / 2, LayoutParams.WRAP_CONTENT));
		
		
		final CustomDialog customDialog = new CustomDialog.Builder(HomeActivity.this).setTitle(R.string.operation).setView(menuList).create();
		customDialog.show();
		
		menuList.setOnItemClickListener( new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				customDialog.cancel();
				customDialog.dismiss();
				if(position == 0){
					playMusic(listPosition);
				} else if(position == 1) {
					setRing();
				} else if(position == 2) {
					showMusicInfo(listPosition);
				}
			}
			
		});
	}
	
	/**
	 * 显示音乐详细信息
	 * @param position
	 */
	private void showMusicInfo(int position) {
		Mp3Info mp3Info = mp3Infos.get(position);
		LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
		View view = inflater.inflate(R.layout.music_info_layout, null);
		((TextView) view.findViewById(R.id.tv_song_title)).setText(mp3Info.getTitle());
		((TextView) view.findViewById(R.id.tv_song_artist)).setText(mp3Info.getArtist());
		((TextView) view.findViewById(R.id.tv_song_album)).setText(mp3Info.getAlbum());
		((TextView) view.findViewById(R.id.tv_song_filepath)).setText(mp3Info.getUrl());
		((TextView) view.findViewById(R.id.tv_song_duration)).setText(MediaUtil.formatTime(mp3Info.getDuration()));
		((TextView) view.findViewById(R.id.tv_song_format)).setText(Contsant.getSuffix(mp3Info.getDisplayName()));
		((TextView) view.findViewById(R.id.tv_song_size)).setText(Contsant.formatByteToMB(mp3Info.getSize()) + "MB");
		new CustomDialog.Builder(HomeActivity.this).setTitle("歌曲详细信息:").setNeutralButton("确定", null).setView(view).create().show();
	}

	/**
	 * 设置铃声
	 */
	protected void setRing() {
		RadioGroup rg_ring = new RadioGroup(HomeActivity.this);
		LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
		rg_ring.setLayoutParams(params);
		//第一个单选按钮,来电铃声
		final RadioButton rbtn_ringtones = new RadioButton(HomeActivity.this);
		rbtn_ringtones.setText("来电铃声");
		rg_ring.addView(rbtn_ringtones, params);
		//第二个单选按钮,闹铃铃声
		final RadioButton rbtn_alarms = new RadioButton(HomeActivity.this);
		rbtn_alarms.setText("闹铃铃声");
		rg_ring.addView(rbtn_alarms, params);
		//第三个单选按钮,通知铃声
		final RadioButton rbtn_notifications = new RadioButton(HomeActivity.this);
		rbtn_notifications.setText("通知铃声");
		rg_ring.addView(rbtn_notifications, params);
		new CustomDialog.Builder(HomeActivity.this).setTitle("设置铃声").setView(rg_ring).setPositiveButton("确定", new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				dialog.cancel();
				dialog.dismiss();
				if(rbtn_ringtones.isChecked()) {
					try {
						//设置来电铃声
						setRingtone(listPosition);
					} catch (Exception e) {
						e.printStackTrace();
					}
				} else if(rbtn_alarms.isChecked()) {
					try {
						//设置闹铃
						setAlarm(listPosition);
					} catch (Exception e) {
						e.printStackTrace();
					}
				} else if(rbtn_notifications.isChecked()) {
					try {
						//设置通知铃声
						setNotifaction(listPosition);
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		}).setNegativeButton("取消", null).show();
	}

	
	/**
	 * 设置提示音
	 * @param position
	 */
	protected void setNotifaction(int position) {
		Mp3Info mp3Info = mp3Infos.get(position);
		File sdfile = new File(mp3Info.getUrl().substring(4));
		ContentValues values = new ContentValues(); 
	      values.put(MediaStore.MediaColumns.DATA, sdfile.getAbsolutePath()); 
	      values.put(MediaStore.MediaColumns.TITLE, sdfile.getName());
	      values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*");  
	      values.put(MediaStore.Audio.Media.IS_RINGTONE, true); 
	      values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false); 
	      values.put(MediaStore.Audio.Media.IS_ALARM, false); 
	      values.put(MediaStore.Audio.Media.IS_MUSIC, false); 
	     
	      Uri uri = MediaStore.Audio.Media.getContentUriForPath(sdfile.getAbsolutePath());
	      Uri newUri = this.getContentResolver().insert(uri, values);
	      RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_NOTIFICATION, newUri);
	      Toast.makeText( getApplicationContext(),"设置通知铃声成功!", Toast.LENGTH_SHORT ).show();
	}

	/**
	 * 设置闹铃
	 * @param position
	 */
	protected void setAlarm(int position) {
		Mp3Info mp3Info = mp3Infos.get(position);
		File sdfile = new File(mp3Info.getUrl().substring(4));
		ContentValues values = new ContentValues(); 
	      values.put(MediaStore.MediaColumns.DATA, sdfile.getAbsolutePath()); 
	      values.put(MediaStore.MediaColumns.TITLE, sdfile.getName());
	      values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*");  
	      values.put(MediaStore.Audio.Media.IS_RINGTONE, true); 
	      values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false); 
	      values.put(MediaStore.Audio.Media.IS_ALARM, false); 
	      values.put(MediaStore.Audio.Media.IS_MUSIC, false); 
	     
	      Uri uri = MediaStore.Audio.Media.getContentUriForPath(sdfile.getAbsolutePath());
	      Uri newUri = this.getContentResolver().insert(uri, values);
	      RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_ALARM, newUri);
	      Toast.makeText( getApplicationContext(),"设置闹钟铃声成功!", Toast.LENGTH_SHORT ).show();
	}

	/**
	 * 设置来电铃声
	 * @param position
	 */
	protected void setRingtone(int position) {
		Mp3Info mp3Info = mp3Infos.get(position);
		File sdfile = new File(mp3Info.getUrl().substring(4));
		ContentValues values = new ContentValues(); 
	      values.put(MediaStore.MediaColumns.DATA, sdfile.getAbsolutePath()); 
	      values.put(MediaStore.MediaColumns.TITLE, sdfile.getName());
	      values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*");  
	      values.put(MediaStore.Audio.Media.IS_RINGTONE, false); 
	      values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false); 
	      values.put(MediaStore.Audio.Media.IS_ALARM, true); 
	      values.put(MediaStore.Audio.Media.IS_MUSIC, false); 
	     
	      Uri uri = MediaStore.Audio.Media.getContentUriForPath(sdfile.getAbsolutePath());
	      Uri newUri = this.getContentResolver().insert(uri, values);
	      RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE, newUri);
	      Toast.makeText( getApplicationContext(),"设置来电铃声成功!", Toast.LENGTH_SHORT ).show();
	}

	/**
	 * 此方法通过传递列表点击位置来获取mp3Info对象
	 * 
	 * @param listPosition
	 */
	public void playMusic(int listPosition) {
		if (mp3Infos != null) {
			Mp3Info mp3Info = mp3Infos.get(listPosition);	
			musicTitle.setText(mp3Info.getTitle());	//这里显示标题
			Bitmap bitmap = MediaUtil.getArtwork(this, mp3Info.getId(), mp3Info.getAlbumId(), true, true);//获取专辑位图对象,为小图
			musicAlbum.setImageBitmap(bitmap);	//这里显示专辑图片
			Intent intent = new Intent(HomeActivity.this, PlayerActivity.class);	//定义Intent对象,跳转到PlayerActivity
			//添加一系列要传递的数据
			intent.putExtra("title", mp3Info.getTitle());	
			intent.putExtra("url", mp3Info.getUrl());
			intent.putExtra("artist", mp3Info.getArtist());
			intent.putExtra("listPosition", listPosition);
			intent.putExtra("currentTime", currentTime);
			intent.putExtra("repeatState", repeatState);
			intent.putExtra("shuffleState", isShuffle);
			intent.putExtra("MSG", AppConstant.PlayerMsg.PLAY_MSG);
			startActivity(intent);
		}
	}
	
	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
	}
	
	
	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
	}
	
	/**
	 * 按返回键弹出对话框确定退出
	 */
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK
				&& event.getAction() == KeyEvent.ACTION_DOWN) {

			new AlertDialog.Builder(this)
					.setIcon(R.drawable.ic_launcher)
					.setTitle("退出")
					.setMessage("您确定要退出?")
					.setNegativeButton("取消", null)
					.setPositiveButton("确定",
							new DialogInterface.OnClickListener() {

								@Override
								public void onClick(DialogInterface dialog,
										int which) {
									finish();
									Intent intent = new Intent(
											HomeActivity.this,
											PlayerService.class);
									unregisterReceiver(homeReceiver);
									stopService(intent); // 停止后台服务
								}
							}).show();

		}
		return super.onKeyDown(keyCode, event);
	}
	
	
	//自定义的BroadcastReceiver,负责监听从Service传回来的广播
	public class HomeReceiver extends BroadcastReceiver {

		@Override
		public void onReceive(Context context, Intent intent) {
			String action = intent.getAction();	
			if(action.equals(MUSIC_CURRENT)){
				//currentTime代表当前播放的时间
				currentTime = intent.getIntExtra("currentTime", -1);
				musicDuration.setText(MediaUtil.formatTime(currentTime));
			} else if (action.equals(MUSIC_DURATION)) {
				duration = intent.getIntExtra("duration", -1);
			}
			else if(action.equals(UPDATE_ACTION)) {
				//获取Intent中的current消息,current代表当前正在播放的歌曲
				listPosition = intent.getIntExtra("current", -1);
				if(listPosition >= 0) {
					musicTitle.setText(mp3Infos.get(listPosition).getTitle());
				}
			}else if(action.equals(REPEAT_ACTION)) {
				repeatState = intent.getIntExtra("repeatState", -1);
				switch (repeatState) {
				case isCurrentRepeat: // 单曲循环
					repeatBtn
							.setBackgroundResource(R.drawable.repeat_current_selector);
					shuffleBtn.setClickable(false);
					break;
				case isAllRepeat: // 全部循环
					repeatBtn
							.setBackgroundResource(R.drawable.repeat_all_selector);
					shuffleBtn.setClickable(false);
					break;
				case isNoneRepeat: // 无重复
					repeatBtn
							.setBackgroundResource(R.drawable.repeat_none_selector);
					shuffleBtn.setClickable(true);
					break;
				}
			}
			else if(action.equals(SHUFFLE_ACTION)) {
				isShuffle = intent.getBooleanExtra("shuffleState", false);
				if(isShuffle) {
					isNoneShuffle = false;
					shuffleBtn.setBackgroundResource(R.drawable.shuffle_selector);
					repeatBtn.setClickable(false);
				} else {
					isNoneShuffle = true;
					shuffleBtn.setBackgroundResource(R.drawable.shuffle_none_selector);
					repeatBtn.setClickable(true);
				}
			}
		}
		
	}
}




最后,我要通知大家的是,关于简、美音乐播放器的开发会暂停一段时间。因为小巫要准备去实习了,也会着手下一个项目的开发,应该说是为自己的毕业设计做准备,我也还没定下来要做一个什么样的应用。不过应该是社交网络相关的,会多一些网络方面的操作。到时也可能会申请博客专栏,简、美音乐播放器没申请专栏,我都有点后悔了。呵呵,不过也没关系了,一系列的博客我想也足以证明自己了。




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics