这个方法获取的音乐信息比较全面,而且很受大家都欢迎,所以建议遍历音乐文件时还是用这个方法,比较简单,都是固定格式代码,就是代码量稍多点,想学习好的东西还是不要怕这些困难,马上上图上代码:
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控件用来放时间,文件大小,歌手名的,这里就不上传了。