mp3 遍历本地音乐方法二

来源:互联网 发布:西安市莲湖区行知小学 编辑:程序博客网 时间:2024/05/22 03:19

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

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 implementsOnItemClickListener {private ListView mListView;private ArrayList<Mp3Info> list;private ArrayList<MusicFileBean> mMusicBeanList = new ArrayList<MusicFileBean>();;@Overrideprotected 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);}// 返回容器中指定位置的IDpublic long getItemId(int position) {return position;}// 返回表示行的viewpublic 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)); // 音乐idString 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;}@Overridepublic 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 3private String title; // 歌曲名称 0private String album; // 专辑 7private long albumId;// 专辑ID 6private String displayName; // 显示名称 4private String artist; // 歌手名称 2private int duration; // 歌曲时长 1private int size; // 歌曲大小 8private String url; // 歌曲路径 5private 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控件用来放时间,文件大小,歌手名的,这里就不上传了。

1 0
原创粉丝点击