1.内容提供者查找手机SD卡下的音乐
配置读取SD卡权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
//调用方法
List<Good> list = GetMusic.Music(MainActivity.this);
package com.bawei.day07_music;
import java.util.ArrayList;
import com.bawei.vo.Good;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.MediaStore;
import android.provider.MediaStore.Audio;
public class GetMusic {
public static ArrayList<Good> Music(Context context) {
ContentResolver resolver = context.getContentResolver();
// 内容提供者访问MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
Cursor cursor = resolver.query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
null);
ArrayList<Good> list=new ArrayList<Good>();
while (cursor.moveToNext()) {
// 名字
String name = cursor.getString(cursor
.getColumnIndex(Audio.Media.TITLE));
// 专辑名
String album = cursor.getString(cursor
.getColumnIndexOrThrow(Audio.Media.ALBUM));
// 歌手名
String artist = cursor.getString(cursor
.getColumnIndexOrThrow(Audio.Media.ARTIST));
// URI歌曲文件存放路径
String path = cursor.getString(cursor
.getColumnIndexOrThrow(Audio.Media.DATA));
// 歌曲文件播放时间长度
int duration = cursor.getInt(cursor
.getColumnIndexOrThrow(Audio.Media.DURATION));
// 音乐文件大小
int size = cursor.getInt(cursor
.getColumnIndexOrThrow(Audio.Media.SIZE));
//保存到集合
list.add(new Good(name,artist,path,false));
}
return list;
}
}
2.播放音乐
//播放音乐
private void startMusic(int arg0) {
//让上一首停下
if (player != null && player.isPlaying()) {
player.stop();
player.reset();
player = null;
}
try {
//播放器
player = new MediaPlayer();
//播放路径
player.setDataSource(list.get(arg0).getMusic());
//准备
player.prepare();
//播放
player.start();
//得到歌曲总进度
c = player.getDuration();
//给进度条seekbar设置最大值
seekBar.setMax(c);
//timer
time();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//timer
private void time() {
// TODO Auto-generated method stub
//timer
timer = new Timer();
//播放进度100毫秒前进一下
timer.schedule(new TimerTask() {
private int d;
@Override
public void run() {
// TODO Auto-generated method stub
//得到当前播放进度
d = player.getCurrentPosition();
//赋给seekbar
seekBar.setProgress(d);
//handler传值 显示时间
Message message = Message.obtain();
message.arg1 = c;
message.arg2 = d;
handler.sendMessage(message);
}
}, 0, 100);
}
//显示时间
Handler handler = new Handler() {
public void handleMessage(Message msg) {
//当前进度
int cu1 = msg.arg1;
//总长度
int cu2 = msg.arg2;
//转换成时间格式
SimpleDateFormat sim = new SimpleDateFormat("mm:ss");
String cur1 = sim.format(cu1);
String cur2 = sim.format(cu2);
//赋给textview
text1.setText(cur2);
text2.setText(cur1);
};
};
3.暂停继续播放
if (player != null) {
//音乐暂停
player.pause();
//得到当前seekBar进度
m = seekBar.getProgress();
}
//继续播放
player.seekTo(m);
4.seekbar调整音乐播放进度
//seekbar调整音乐播放进度
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
if (player != null) {
//得到当前拖拽的进度
player.seekTo(seekBar.getProgress());
//timer
timecan();
//timer计时
time();
}
}
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
//清空timer
timecan();
}
public void onProgressChanged(SeekBar seekBar,
int progress, boolean fromUser) {
// TODO Auto-generated method stub
}
});
////清空timer
private void timecan() {
// TODO Auto-generated method stub
if (timer != null) {
timer.cancel();
}
}
5.Intent跳转传list集合
先把List<>改为ArrayList<>
ArrayList<Good> list=new ArrayList<Good>();
Intent intent = new Intent(MainActivity.this,InfoActivity.class);
intent.putExtra("list", list);
startActivity(intent);
Intent intent = getIntent();
ArrayList<Good> list= (ArrayList<Good>) intent.getSerializableExtra("list");