首先,这个播放器不是我想的,我是根据这个作者的博客教程来写的咯。。。也算是自己想啦,附上链接 http://blog.csdn.net/wwj_748/article/details/8899699
第一篇写的这些内容很简单,跟链接作者写的几乎一样。
他写的比较复杂,有些实现方式也不一样,所以自己写个博客记录一下...O(∩_∩)O~
这个播放器很简单,如果你是什么Api都不知道,看了这个两天就写完了,你可以边看边查相关的API是干嘛用的,如果之前都了解了相关的API,那么一天就能编完。
做一个播放器的大致思路是什么呢?播放器当然是要有播放的功能咯,这是我在废话。这个播放器是不带下载功能的,所以肯定是从你手机中获取已经存在的音乐。于是第一步就是获取手机中的音乐信息,这个跟播放器的界面没什么联系,那你可以把它写成一个工具类,叫做GetMusicListUtil,专门用来获取手机音乐信息的类。 上代码:
public class GetMusicListUtil {
/**
* 从手机中得到所有的音乐,放在list中保存
*
* @param context
* @return
* @author Yang
*/
public static List<Mp3Info> getMusicInfos(Context context)
{
Cursor cursor = context.getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
List<Mp3Info> musicInfos = new ArrayList<Mp3Info>();
for(int i=0; i<cursor.getCount(); i++)
{
cursor.moveToNext();
Mp3Info music = new Mp3Info();
long musicId = cursor.getLong(cursor
.getColumnIndex(MediaStore.Audio.Media._ID));
String musicTitle = cursor.getString(cursor
.getColumnIndex(MediaStore.Audio.Media.TITLE));
String musicArtist = cursor.getString(cursor
.getColumnIndex(MediaStore.Audio.Media.ARTIST));
long musicTime = cursor.getLong(cursor
.getColumnIndex(MediaStore.Audio.Media.DURATION)); //时长
long musicSize = cursor.getLong(cursor
.getColumnIndex(MediaStore.Audio.Media.SIZE)); //文件大小
String musicUrl = cursor.getString(cursor
.getColumnIndex(MediaStore.Audio.Media.DATA)); //文件路径
int isMusic = cursor.getInt(cursor
.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC));
//只把音乐添加到集合中
if(isMusic != 0)
{
music.setId(musicId);
music.setArtist(musicArtist);
music.setDuration(musicTime);
music.setSize(musicSize);
music.setUrl(musicUrl);
music.setTitle(musicTitle);
musicInfos.add(music);
}
}
return musicInfos;
}
/**
* 将因音乐的时长由毫秒转换成分:秒的格式
*
* @param time
* @return
* @author Yang
*/
public static String formatTime(long time) {
String min = time / (1000 * 60) + "";
String sec = time % (1000 * 60) + "";
if (min.length() < 2) {
min = "0" + time / (1000 * 60) + "";
} else {
min = time / (1000 * 60) + "";
}
if (sec.length() == 4) {
sec = "0" + (time % (1000 * 60)) + "";
} else if (sec.length() == 3) {
sec = "00" + (time % (1000 * 60)) + "";
} else if (sec.length() == 2) {
sec = "000" + (time % (1000 * 60)) + "";
} else if (sec.length() == 1) {
sec = "0000" + (time % (1000 * 60)) + "";
}
return min + ":" + sec.trim().substring(0, 2);
}
/**
* 将List<Mp3Info>转换成List<HashMap<String,String>>的格式
* 为了给SimpleAdapter填充数据
*
* @param musicInfos
* @return
* @author Yang
*
*/
public static List<HashMap<String,String>> getMusicHashMaps(
List<Mp3Info> musicInfos)
{
List<HashMap<String,String>> musicHashMaps =
new ArrayList<HashMap<String,String>>();
for(Iterator<Mp3Info> iterator = musicInfos.iterator();iterator.hasNext();)
{
Mp3Info music = iterator.next();
HashMap<String,String> map = new HashMap<String,String>();
map.put("title", music.getTitle());
map.put("artist", music.getArtist());
map.put("size", String.valueOf(music.getSize()));
map.put("time", formatTime(music.getDuration()));
map.put("url", music.getUrl());
musicHashMaps.add(map);
}
return musicHashMaps;
}
}
相信大家都能看懂,Cursor对象进行查询,然后存到一个Mp3Info类型的List中,之所以下面还写了一个List<HashMap<String,String>>进行保存,就是为了给SimpleAdapter用的,这个adapter给listView填充数据。
这个和原作者写的没什么区别,另外其中的Mp3Info是一个javabean,如下所示:
package org.com.ViPlayer;
public class Mp3Info
{
public long id;
public String title;
public String artist;
public long duration;
public long size;
public String url;
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 getArtist() {
return artist;
}
public void setArtist(String artist) {
this.artist = artist;
}
public long getDuration() {
return duration;
}
public void setDuration(long duration) {
this.duration = duration;
}
public long getSize() {
return size;
}
public void setSize(long size) {
this.size = size;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
一共只用到了这么多图片:背景,播放按钮图,下一首按钮图,前一首按钮图,音乐模式按钮图,音乐小图标。