mp3 遍历本地音乐方法二

      这个方法获取的音乐信息比较全面,而且很受大家都欢迎,所以建议遍历音乐文件时还是用这个方法,比较简单,都是固定格式代码,就是代码量稍多点,想学习好的东西还是不要怕这些困难,马上上图上代码:

package com.example.duomimusicplayer;

import java.util.ArrayList;
import java.util.List;

import com.example.duomimusicplayer.R;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MyMusicListActivity extends Activity implements
		OnItemClickListener {

	private ListView mListView;
	private ArrayList<Mp3Info> list;
	private ArrayList<MusicFileBean> mMusicBeanList = new ArrayList<MusicFileBean>();;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.playerlist_layout);
		mListView = (ListView) findViewById(R.id.playlist_listview);
		mListView.setOnItemClickListener(this);
		
		if (!isExternalStorageWritable()) {
			Toast.makeText(this, "外部设备不可用", Toast.LENGTH_SHORT).show();
			return;
		}
		mMusicBeanList = getMusicBeanList(this);
		list = getMp3Infos(this);
		for (int i = 0; i < list.size(); i++) {
			Mp3Info mp3 = list.get(i);
		}
		
		MyBaseAdapter adapter = new MyBaseAdapter(this);
		adapter.setData(list);
		mListView.setAdapter(adapter);

		
	}

	/**
	 * 检查外部存储是否可用
	 * 
	 * @return
	 */
	private boolean isExternalStorageWritable() {
		String state = Environment.getExternalStorageState();
		if (state.equals(Environment.MEDIA_MOUNTED)) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * MyBaseAdapter
	 */
	class MyBaseAdapter extends BaseAdapter {
		private Context mContext;
		private List<Mp3Info> mList = new ArrayList<Mp3Info>();
		private LayoutInflater mInflater; // 把xml布局文件转换成View对象
		private int[] playerArray;

		public MyBaseAdapter(Context context) {
			this.mContext = context;
			mInflater = LayoutInflater.from(context);
		}

		// 设置数据源,刷新适配器
		public void setData(List<Mp3Info> list) {
			mList = list;

			playerArray = new int[mList.size()];
			for (int i = 0; i < playerArray.length; i++) {
				playerArray[i] = 0;
			}
			notifyDataSetChanged();// 通知刷新适配器数据
		}

		public void setPlayerArray(int[] playerArray) {
			this.playerArray = playerArray;
			notifyDataSetChanged();// 通知刷新适配器数据
		}

		// 返回容器中元素个数
		public int getCount() {
			return mList.size();
		}

		// 返回容器中指定位置的数据项
		public Object getItem(int position) {
			return mList.get(position);
		}

		// 返回容器中指定位置的ID
		public long getItemId(int position) {
			return position;
		}

		// 返回表示行的view
		public View getView(int position, View convertView, ViewGroup parent) {
			ViewHolder viewHolder = null;
			if (convertView == null) {
				//将第一个参数指定的布局文件转换成View对象,如果第二参数ViewGroup不为空,则把view对象添加到该ViewGroup中
				convertView = mInflater.inflate(R.layout.musiclist_item, null);
				viewHolder = new ViewHolder();
//				viewHolder.iconImg =(ImageView) convertView
//						.findViewById(R.id.musiclist_icon);
				viewHolder.titleTxt = (TextView) convertView
						.findViewById(R.id.musiclist_title);
				viewHolder.sizeTxt = (TextView) convertView
						.findViewById(R.id.musiclist_size);
				viewHolder.durationTxt = (TextView) convertView
						.findViewById(R.id.musiclist_time);
				viewHolder.artistTxt = (TextView) convertView
						.findViewById(R.id.musiclist_artistt);

				convertView.setTag(viewHolder);
			} else {
				viewHolder = (ViewHolder) convertView.getTag();
			}

			Mp3Info music = (Mp3Info) getItem(position);
			
//			if(playerArray[position] == 1){
//				viewHolder.iconImg.setVisibility(View.VISIBLE);
//			}else{
//				viewHolder.iconImg.setVisibility(View.INVISIBLE);
//			}
			viewHolder.titleTxt.setText(music.getDisplayName());
			viewHolder.artistTxt.setText(music.getArtist());
			viewHolder.durationTxt.setText(toTime(music.getDuration()));
			viewHolder.sizeTxt.setText(toMB(music.getSize()) + "MB");
			return convertView;
		}

		class ViewHolder {
			TextView titleTxt;// 歌曲名字
			TextView sizeTxt;// 歌曲大小
			TextView durationTxt;// 歌曲时长
			TextView artistTxt;// 歌手
			ImageView artistImg;// 歌手写真
			ImageView iconImg;
		}
	}

	/**
	 * 时间转化处理
	 */
	public static String toTime(int time) {
		time /= 1000;
		int minute = time / 60;
		int second = time % 60;
		minute %= 60;
		return String.format(" %02d:%02d ", minute, second);
	}

	/**
	 * 文件大小转换,将B转换为MB
	 */
	public String toMB(int size) {
		float a = (float) size / (float) (1024 * 1024);
		String b = Float.toString(a);
		int c = b.indexOf(".");
		String fileSize = "";
		fileSize += b.substring(0, c + 2);
		return fileSize;
	}

	/**
	 * 从数据库中查询歌曲的信息,保存在ArrayList<Mp3Info>当中
	 * 
	 * @return
	 */
	public ArrayList<Mp3Info> getMp3Infos(Context context) {
		Cursor cursor = context.getContentResolver().query(
				MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
				MediaStore.Audio.Media.DEFAULT_SORT_ORDER);

		ArrayList<Mp3Info> musicList = new ArrayList<Mp3Info>();

		while (cursor.moveToNext()) {
			long id = cursor.getLong(cursor
					.getColumnIndex(MediaStore.Audio.Media._ID)); // 音乐id
			String title = cursor.getString((cursor
					.getColumnIndex(MediaStore.Audio.Media.TITLE))); // 音乐标题
			String artist = cursor.getString(cursor
					.getColumnIndex(MediaStore.Audio.Media.ARTIST)); // 艺术家
			String album = cursor.getString(cursor
					.getColumnIndex(MediaStore.Audio.Media.ALBUM)); // 专辑
			String displayName = cursor.getString(cursor
					.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));// 音乐名字
			long albumId = cursor.getInt(cursor
					.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
			int duration = cursor.getInt(cursor
					.getColumnIndex(MediaStore.Audio.Media.DURATION)); // 时长
			int size = cursor.getInt(cursor
					.getColumnIndex(MediaStore.Audio.Media.SIZE)); // 文件大小
			String url = cursor.getString(cursor
					.getColumnIndex(MediaStore.Audio.Media.DATA)); // 文件路径
			int isMusic = cursor.getInt(cursor
					.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC)); // 是否为音乐
			if (isMusic != 0) {
				// 只把音乐添加到集合当中
				Mp3Info mp3Info = new Mp3Info();

				String artists = displayName;
				String musicName = "";
				String[] musicArray = artists.split("-");
				artist = musicArray[0];
				musicName = musicArray[1];

				mp3Info.setId(id);
				mp3Info.setTitle(title);
				mp3Info.setArtist(artist);
				mp3Info.setAlbum(album);
				mp3Info.setDisplayName(musicName);
				mp3Info.setAlbumId(albumId);
				mp3Info.setDuration(duration);
				mp3Info.setSize(size);
				mp3Info.setUrl(url);

				musicList.add(mp3Info);
			}
		}
		return musicList;
	}

	/**
	 * 把需要传递的音乐信息遍历出来,添加到ArrayList<MusicFileBean>中,传递整个数组
	 * 
	 * @return
	 */
	public ArrayList<MusicFileBean> getMusicBeanList(Context context) {
		Cursor cursor = context.getContentResolver().query(
				MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
				MediaStore.Audio.Media.DEFAULT_SORT_ORDER);

		while (cursor.moveToNext()) {
			String displayName = cursor.getString(cursor
					.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
			String url = cursor.getString(cursor
					.getColumnIndex(MediaStore.Audio.Media.DATA)); // 文件路径
			int isMusic = cursor.getInt(cursor
					.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC)); // 是否为音乐
			if (isMusic != 0) {
				// 只把音乐添加到集合当中
				String artist = displayName;
				String musicName = "";

//				Log.v("tag", "2222222222222 artist>>>>>:" + artist);
				String[] musicArray = artist.split("-");
				Log.v("", " musicArray.length>>>>>:" + musicArray.length);
				artist = musicArray[0];
				musicName = musicArray[1];

//				Log.v("tag", "22222222 artist>>>>>:" + artist);
//				Log.v("tag", "2222222 musicName>>>>>:" + musicName);

				MusicFileBean music = new MusicFileBean();
				music.setMusicName(musicName);
				music.setMusicPath(url);
				music.setArtist(artist);

				mMusicBeanList.add(music);
//				Log.v("", "mMusicBeanList>>>>>:" + mMusicBeanList);
			}
		}
		return mMusicBeanList;
	}

	@Override
	public void onItemClick(AdapterView<?> parent, View view, int position,
			long id) {
		Intent intent = new Intent(this, MusicServiceActivity.class);
		intent.putParcelableArrayListExtra("MUSICFILE_LIST", mMusicBeanList);
		intent.putExtra("CURRENT_POSTION", position);
		startActivity(intent);
	}
}
package com.example.duomimusicplayer;

public class Mp3Info {
	private long id; // 歌曲ID 3
	private String title; // 歌曲名称 0
	private String album; // 专辑 7
	private long albumId;// 专辑ID 6
	private String displayName; // 显示名称 4
	private String artist; // 歌手名称 2
	private int duration; // 歌曲时长 1
	private int size; // 歌曲大小 8
	private String url; // 歌曲路径 5
	private String lrcTitle; // 歌词名称
	private String lrcSize; // 歌词大小

	public Mp3Info() {

	}

	public Mp3Info(long id, String title, String album, long albumId,
			String displayName, String artist, int duration, int size,
			String url, String lrcTitle, String lrcSize) {
		super();
		this.id = id;
		this.title = title;
		this.album = album;
		this.albumId = albumId;
		this.displayName = displayName;
		this.artist = artist;
		this.duration = duration;
		this.size = size;
		this.url = url;
		this.lrcTitle = lrcTitle;
		this.lrcSize = lrcSize;
	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getAlbum() {
		return album;
	}

	public void setAlbum(String album) {
		this.album = album;
	}

	public long getAlbumId() {
		return albumId;
	}

	public void setAlbumId(long albumId) {
		this.albumId = albumId;
	}

	public String getDisplayName() {
		return displayName;
	}

	public void setDisplayName(String displayName) {
		this.displayName = displayName;
	}

	public String getArtist() {
		return artist;
	}

	public void setArtist(String artist) {
		this.artist = artist;
	}

	public int getDuration() {
		return duration;
	}

	public void setDuration(int duration) {
		this.duration = duration;
	}

	public int getSize() {
		return size;
	}

	public void setSize(int size) {
		this.size = size;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public String getLrcTitle() {
		return lrcTitle;
	}

	public void setLrcTitle(String lrcTitle) {
		this.lrcTitle = lrcTitle;
	}

	public String getLrcSize() {
		return lrcSize;
	}

	public void setLrcSize(String lrcSize) {
		this.lrcSize = lrcSize;
	}
}

xml布局文件跟前面的一样就多了几个TextView控件用来放时间,文件大小,歌手名的,这里就不上传了。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值