【菜鸟学安卓】- Mp3播放器


做一个简单的Mp3播放器的主要内容包括:


1.获取手机中的mp3文件

在手机中有一个内容提供者供我们使用

主要就是下面的语句来获取

<pre name="code" class="java">Cursor cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER); 

 
//			//歌曲ID:MediaStore.Audio.Media._ID
//			int id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID));  
//			//歌曲的名称 :MediaStore.Audio.Media.TITLE
//			String tilte = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));  
//			//歌曲的专辑名:MediaStore.Audio.Media.ALBUM
//			String album = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));  
//			//歌曲的歌手名: MediaStore.Audio.Media.ARTIST 
//			String artist = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));  
//			//歌曲文件的路径 :MediaStore.Audio.Media.DATA
//			String url = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));    
//			//歌曲的总播放时长 :MediaStore.Audio.Media.DURATION
//			int duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));    
//			//歌曲文件的大小 :MediaStore.Audio.Media.SIZE
//			int size =(int)cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE));

2.播放获取出来的mp3文件

MediaPlayer mediaPlayer = new MediaPlayer();//实例化一个媒体播放器

mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//设置媒体播放器的音乐类型

mediaPlayer.setDataSource(path);//设置播放文件的路径

mediaPlayer.setLooping(true);

mediaPlayer.prepareAsync();//播放准备

mediaPlayer.start();//开始播放


主文件代码如下:

由于博主只是学习下这两部分的内容,所以其中有些地方是有问题的,看主要内容就好。

package com.mp3palyer;

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

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;



public class MainActivity extends Activity implements OnClickListener {
	
	
	private MediaPlayer mediaPlayer;
	
	private LinearLayout toControlView;
	private LinearLayout playBtn;
	private LinearLayout favoriteBtn;
	private LinearLayout nextBtn;
	
	private ImageView playBtnImage;
	
	private String currentPath;
	
	private ListView mp3ListView;
	
	private List<Mp3Info> mp3InfoList = new ArrayList<Mp3Info>();
	
	
	private int currentPosition = 0;
	
	private int playMode = 0;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		findMp3();
		
		if(mp3InfoList != null)
			currentPath = mp3InfoList.get(0).getUrl();
		
		findViewId();
		
		
		
	}
	
	
	
	private void findMp3() {
		Cursor cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER); 
		System.out.println("一共有  "+cursor.getCount());
		while(cursor.moveToNext()){
			String url = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
			if(url.endsWith(".mp3")){
				Mp3Info mp3Info = new Mp3Info();

				int id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID));  
				int duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));    
				int size =(int)cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE));
				String tilte = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));  
				String album = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));  
				String artist = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));  
				
				mp3Info.setId(id);
				mp3Info.setDuration(duration);
				mp3Info.setSize(size);
				mp3Info.setTilte(tilte);
				mp3Info.setArtist(artist);
				mp3Info.setAlbum(album);
				mp3Info.setUrl(url);
				
				mp3InfoList.add(mp3Info);
			}
		}
		cursor.close();
	}



	private void findViewId(){
		toControlView = (LinearLayout)findViewById(R.id.toControlView);
		playBtn = (LinearLayout)findViewById(R.id.playBtn);
		favoriteBtn = (LinearLayout)findViewById(R.id.favoriteBtn);
		nextBtn = (LinearLayout)findViewById(R.id.nextBtn);
		
		playBtnImage = (ImageView)findViewById(R.id.playBtnImage);
		
		mp3ListView = (ListView)findViewById(R.id.myListView);
		Mp3Adapter mp3ListAdapter = new Mp3Adapter(mp3InfoList);
		mp3ListView.setAdapter(mp3ListAdapter);
		
		toControlView.setOnClickListener(this);
		playBtn.setOnClickListener(this);
		favoriteBtn.setOnClickListener(this);
		nextBtn.setOnClickListener(this);
		
		mp3ListView.setOnItemClickListener(new ListView.OnItemClickListener(){
			@Override
			public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
				String path = mp3InfoList.get(position).getUrl();//获取路径
				play(path);//播放音乐
			}
			
		});
		
	}

	@Override
	public void onClick(View v) {
		switch(v.getId()){
		case R.id.toControlView:
			startActivity(new Intent(this,PlayActivity.class));
			break;
		case R.id.favoriteBtn:
			break;
		case R.id.playBtn:
			if(playMode == 0){
				playMode = 1;
				playBtnImage.setImageResource(R.drawable.ao9);
				continuePlay(currentPath);
			}else{
				playMode = 0;
				playBtnImage.setImageResource(R.drawable.aoa);
				pause();
			}
			
			break;
		case R.id.nextBtn:
			playNext(mp3InfoList.get(currentPosition+1).getUrl());
			break;
		default:
		}
		
	}
	
	//播放一个新的
	private void playNew(String path){
		try {
			File file = new File(path);
			if(file.exists()&&file.length()>0){
				mediaPlayer = new MediaPlayer();
				mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
				mediaPlayer.setDataSource(path);
				mediaPlayer.setLooping(true);
				mediaPlayer.prepareAsync();
				mediaPlayer.setOnPreparedListener(new OnPreparedListener(){
					@Override
					public void onPrepared(MediaPlayer mp) {
						mediaPlayer.start();
					}
				});
				mediaPlayer.setOnCompletionListener(new OnCompletionListener(){
					@Override
					public void onCompletion(MediaPlayer mp) {
						//mediaPlayer.
					}
				});
				mediaPlayer.setOnErrorListener(new OnErrorListener(){
					@Override
					public boolean onError(MediaPlayer mp, int what, int extra) {
						
						return false;
					}
					
				});
			
			}else{
				Toast.makeText(this, "文件不存在!", 0).show();
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	//播放默认的
	private void play(String path){
		//先停止当前的播放
		if(mediaPlayer != null){
			stop();
		}
		//播放新的
		playNew(path);
	}
	
	//播放下一首
	private void playNext(String path){
		play(path);
	}
	
	//暂停
	private void pause(){
		if(mediaPlayer != null && mediaPlayer.isPlaying()){
			mediaPlayer.pause();
		}
	}
	
	//停止
	private void stop(){
		if(mediaPlayer != null&& mediaPlayer.isPlaying()){
			mediaPlayer.stop();
			mediaPlayer.release();
			mediaPlayer = null;
		}
	}
	
	//继续播放
	private void continuePlay(String path){
		if(mediaPlayer != null){
			mediaPlayer.start();
		}else{
			playNew(path);
		}
	}
	
	
	public class Mp3Adapter extends BaseAdapter{
		
		private List<Mp3Info> mp3List;
		
		public Mp3Adapter(List<Mp3Info> mp3List){
			this.mp3List = mp3List;
		}

		@Override
		public int getCount() {
			if(mp3List != null)
				return mp3List.size();
			return 0;
		}

		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return null;
		}

		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return 0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			View view = null;
			if(convertView != null){
				view = convertView;
			}else{
				view = View.inflate(MainActivity.this, R.layout.item_list, null);
			}
			ImageView musicImage = (ImageView)view.findViewById(R.id.musicImage);
			TextView musicName= (TextView)view.findViewById(R.id.musicName);
			TextView musicSinger= (TextView)view.findViewById(R.id.musicSinger);
			musicName.setText(mp3List.get(position).getTilte());
			musicSinger.setText(mp3List.get(position).getArtist());
			return view;
		}
		
	}
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值