功能一,遍历sdcard里面的音乐文件显示到listview里面;
要遍历sdk首先要判断sdk是否能用;如果可用再进行遍历;
* 检查外部存储是否可用
*
* @return
*/
private boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED)) {
return true;
} else {
return false;
}
}
File folder = Environment.getExternalStorageDirectory();
private void toSearchFile(File rootFile) {
File[] listFile = rootFile.listFiles();
if (listFile != null) {
for (File file : listFile) {
if (file.isDirectory()) {// 目录
File files = file.getAbsoluteFile();
toSearchFile(files);
} else { // 文件操作
// 过虑文件显示路径
if (file.getPath().endsWith(".mp3")) {
mFileList.add(file);
// 构造音乐播放列表资源
MusicBean music = new MusicBean();
music.setMusicName(file.getName());
music.setMusicPath(file.getPath());
String musicName = music.getMusicName(); // 音乐文件名.mp3
musicName = musicName.substring(0,
musicName.length() - 4); // ========字符串处理方法一=======
// =============字符串处理方法二===========
//
// Logs.v("musicName >>>>> :"+musicName);
// String[] musicArray = musicName.split(".");
// //{音乐文件名.mp3}
// Logs.v("musicArray size :"+musicArray.length);
// musicName = musicArray[0];
music.setMusicName(musicName);
mMusicBeanList.add(music);
}
}
}
}
}
遍历文件要使用递归调用,最后把遍历出来的文件判断以MP3结尾的就放入定义好的动态数组Arraylist里面,这个LIst就是数据源了了;
功能二:点击LIstview的单项跳转到播放页面去播放;
这儿就需要用到Intent传参了;
Intent带的参数就是你便利出来的文件的路劲,
获取路劲使用ListView的每一项点击事件OnItemClickListener;public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
用parent.getadapter获取数据源,用adapter.geitem获取每一项的对象就是一个文件,然后就能获取到file的信息了,再使用Intent穿过去;
点击播放就能播放了;
功能s三:如何在播放页面点击上下首歌曲能播放;
因为遍历出来的文件放在是另一个页面的ListView;
所以这里Intent传参就是要传ArrayList对象了;
package com.example.bean;
import android.os.Parcel;
import android.os.Parcelable;
public class MusicBean implements Parcelable {
private String musicName;
private String musicPath;
public String getMusicName() {
return musicName;
}
public void setMusicName(String musicName) {
this.musicName = musicName;
}
public String getMusicPath() {
return musicPath;
}
public void setMusicPath(String musicPath) {
this.musicPath = musicPath;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(musicName);
dest.writeString(musicPath);
}
public static final Parcelable.Creator<MusicBean> CREATOR = new Parcelable.Creator<MusicBean>() {
@Override
public MusicBean createFromParcel(Parcel source) {
MusicBean music = new MusicBean();
music.musicName = source.readString();
music.musicPath = source.readString();
return music;
}
@Override
public MusicBean[] newArray(int size) {
return new MusicBean[size];
}
};
}
定义的实现implements Parcelable 的对象把需要穿的数据放进去,在遍历文件出来的时候就放进去
if (file.getPath().endsWith(".mp3")) {
mFileList.add(file);
// 构造音乐播放列表资源
MusicBean music = new MusicBean();
music.setMusicName(file.getName());
music.setMusicPath(file.getPath());
String musicName = music.getMusicName(); // 音乐文件名.mp3
musicName = musicName.substring(0,
musicName.length() - 4); // ========字符串处理方法一=======
// =============字符串处理方法二===========
//
// Logs.v("musicName >>>>> :"+musicName);
// String[] musicArray = musicName.split(".");
// //{音乐文件名.mp3}
// Logs.v("musicArray size :"+musicArray.length);
// musicName = musicArray[0];
music.setMusicName(musicName);
mMusicBeanList.add(music);
最后构建Intent@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Intent intent = new Intent(this, PlayerPag.class);
intent.putParcelableArrayListExtra("MUSIC_LIST", mMusicBeanList);
intent.putExtra("CURRENT_POSTION", position);
startActivity(intent);
}
在播放页面接收
Intent intent = getIntent();
mMusicList = intent.getParcelableArrayListExtra("MUSIC_LIST");
mCurrentPostion = intent.getIntExtra("CURRENT_POSTION", 0);
因为要实现上下首切换所以要获得一个position,得到你点击的第几首
最后就是优化上下首切换,防止切换到最后或者最开始报错
case R.id.playerpag_control_previous_btn:
if (--mCurrentPostion >= 0) {
playerNewMusic(mCurrentPostion);
} else {
mCurrentPostion = 0;
Toast.makeText(this, "已到第一首", Toast.LENGTH_SHORT).show();
}
break;
case R.id.playerpag_control_next_btn:
if (++mCurrentPostion < mMusicList.size()) {
playerNewMusic(mCurrentPostion);
} else {
mCurrentPostion = mMusicList.size() - 1;
Toast.makeText(this, "已到最后一首", Toast.LENGTH_SHORT).show();
}
break;
}