您的位置:首页 > 其它

音乐播放器

2015-12-26 12:39 232 查看
在activity中找到sdcard中的音乐文件:

package com.baidu.test;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import com.baidu.adapter.MusicAdapter;
import com.baidu.bean.Musics;
import com.baidu.list.MyList;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;

public class MainActivity extends Activity{

private ListView lv_listview;
private MusicAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

init();
}

private void init() {
// 找控件对象
lv_listview=(ListView)findViewById(R.id.lv_listview);

// 获取sdcard卡下的音乐
getMusic();
// 适配器
adapter=new MusicAdapter(this, MyList.list);
lv_listview.setAdapter(adapter);

// listview的监听
lv_listview.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long id) {
Musics ms=MyList.list.get(position);
// 跳转下一个页面
Intent intent=new Intent(MainActivity.this,PlayAvtivity.class);
intent.putExtra("ms", ms);
intent.putExtra("position", position);
startActivity(intent);
}
});
}
public ArrayList<Musics> getMusic(){

ArrayList<Musics> musicslist=new ArrayList<Musics>();
//查询sdcard上的音乐信息
Cursor mAudioCursor=this.getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
null,null,null,null);
//循环输出歌曲的信息
for(int i=0;i<mAudioCursor.getCount();i++){
mAudioCursor.moveToNext();
//找到歌曲标题和总时间对应的列索引
int indexTitle=mAudioCursor.
getColumnIndex(MediaStore.Audio.AudioColumns.TITLE);
int indexARTIST=mAudioCursor.
getColumnIndex(MediaStore.Audio.AudioColumns.ARTIST);
int indexDuration=mAudioCursor.
getColumnIndex(MediaStore.Audio.AudioColumns.DURATION);
int indexSize=mAudioCursor.
getColumnIndex(MediaStore.Audio.AudioColumns.SIZE);
int indexUri=mAudioCursor.
getColumnIndex(MediaStore.Audio.AudioColumns.DATA);

String musicName=mAudioCursor.getString(indexTitle);
String musicAutor=mAudioCursor.getString(indexARTIST);
int musicDuration=mAudioCursor.getInt(indexDuration);
int musicSize=mAudioCursor.getInt(indexSize);
String musicUri=mAudioCursor.getString(indexUri);

Musics music=new Musics(musicName, musicUri);

Log.e("TAG","要填进集合的值:"+music.toString());
MyList.list.add(music);
}
return musicslist;

}

}
baseadapter适配器:
package com.baidu.adapter;

import java.util.ArrayList;

import com.baidu.bean.Musics;
import com.baidu.test.R;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class MusicAdapter extends BaseAdapter{
private Context context;
private ArrayList<Musics> music_list;

public MusicAdapter(Context context, ArrayList<Musics> music_list) {
super();
this.context = context;
this.music_list = music_list;
}

@Override
public int getCount() {
return music_list.size();
}

@Override
public Object getItem(int position) {
return music_list.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder vh=null;
if(convertView==null){
vh=new ViewHolder();
convertView=LayoutInflater.from(context).inflate(R.layout.listview_item, null);
vh.tv_music_name=(TextView) convertView.findViewById(R.id.tv_music_name);

convertView.setTag(vh);
}else{
vh=(ViewHolder) convertView.getTag();
}
Musics ms=music_list.get(position);

vh.tv_music_name.setText(ms.getTitle());

return convertView;
}
class ViewHolder{
TextView tv_music_name;
}

}
把音乐列表的音乐保存到一个外部类中:
package com.baidu.list;

import java.util.ArrayList;

import com.baidu.bean.Musics;

public class MyList {
public static ArrayList<Musics> list=new ArrayList<Musics>();
}


点击listview的item项跳转到音乐播放界面:
package com.baidu.test;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;

import com.baidu.bean.Musics;
import com.baidu.list.MyList;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;

public class PlayAvtivity extends Activity{
private SeekBar seekbar;
private Button btn_up, btn_startandpause, btn_next;
private TextView tv_name;
private static MediaPlayer mp;
private int i = 0;
private Timer timer;
private int num = 0;
private int position;
private String oldPath;
private String path;

Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
if(msg.what==0){
seekbar.setProgress(mp.getCurrentPosition());
}
if (msg.arg1 == mp.getDuration()) {
// seekbar.setProgress(mp.getCurrentPosition());
timer.cancel();
}
};
};
private TextView btn_back;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_item);

init();
}

private void init() {
SharedPreferences spf=getSharedPreferences("name", MODE_PRIVATE);
oldPath=spf.getString("gettimer", "");

seekbar = (SeekBar) findViewById(R.id.sb_progressbar);
btn_back = (TextView) findViewById(R.id.tv_back);
btn_next = (Button) findViewById(R.id.bt_next);
btn_up = (Button) findViewById(R.id.bt_up);
btn_startandpause = (Button) findViewById(R.id.bt_pause);

getInfo1();

btn_back.setOnClickListener(l);
btn_startandpause.setOnClickListener(l);
btn_up.setOnClickListener(l);
btn_next.setOnClickListener(l);

seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
mp.seekTo(seekBar.getProgress());
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}

@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
}
});
}

OnClickListener l = new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.bt_up:
musicUp();
break;
case R.id.bt_pause:
if (i == 0) {

btn_startandpause.setSelected(true);
mp.pause();
i = i + 1;
} else if (i == 1) {
btn_startandpause.setSelected(false);
mp.start();
i = 0;
}
break;
case R.id.bt_next:
musicAuto();
break;
case R.id.tv_back:
finish();
break;

default:
break;
}
}
};

// 播放上一首
public void musicUp(){
mp.stop(); // 先销毁前面播放音乐的多媒体对象
position--; // 获取上一首音乐对象下标
if (position < 0) {
position = MyList.list.size() - 1;
}
// mp = MediaPlayer.create(this, list.get(num).getMusic());
// 把音乐的播放时长给拖拽条
mp=new MediaPlayer();
try {
mp.setDataSource(MyList.list.get(position).getPath());
mp.prepare();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

mp.start(); // 播放
seek();
mp.setOnCompletionListener(new OnCompletionListener() {

public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
musicAuto(); // 自动播放下一曲
}
});

saveTimer(position);
}

// 继续播放下一首
public void musicAuto() {
mp.stop();
position++;
if (position == (MyList.list.size())) {
position = 0;
}
// Musics music = MyList.list.get(num);

mp = new MediaPlayer();
try {
mp.setDataSource(MyList.list.get(position).getPath());
mp.prepare();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

// 把音乐的播放时长给拖拽条
seek();
mp.start();
// 给多媒体加监听(音乐播放完后)
mp.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
musicAuto(); // 用了个递归
}
});

saveTimer(position);
}

public void getInfo1() {
Intent intent = getIntent();
Musics ms=(Musics) intent.getSerializableExtra("ms");
position=intent.getIntExtra("position", 0);
path=MyList.list.get(position).getPath();
try {
if (mp != null) {
mp.pause();
}
if(mp!=null && path.equals(oldPath)){
mp.start();
seek();
}else{
mp = new MediaPlayer();
mp.setDataSource(path);
mp.prepare();

mp.start();
seek();
// 给播放完所有歌曲时添加监听
mp.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
musicAuto();
}
});
}
saveTimer(position);

} catch (IllegalArgumentException e
9733
) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

public void saveTimer(int position_x){
SharedPreferences sp = getSharedPreferences("name", MODE_PRIVATE);
Editor edit = sp.edit();
edit.putString("gettimer", MyList.list.get(position_x).getPath());
edit.commit();
}

public void seek() {
if (timer != null) {
timer.cancel();
}
seekbar.setMax(mp.getDuration());

timer = new Timer();
timer.schedule(new TimerTask() {

@Override
public void run() {
Message mg=new Message();

handler.sendEmptyMessage(0);
}
}, 0, 100);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: