音乐播放器
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.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);
}
}
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);
}
}
相关文章推荐
- (三)主Makefile解析
- (三)openwrt主Makefile解析
- 在系统中生成业务ID的几种方法
- Android编程开发之NotiFication用法详解
- Mac 下各种环境变量的配置
- iOS crash log 解析 symbol address = stack address - slide 运行时获取slide的api 利用dwarfdump从dsym文件中得到symbol
- linux--文件夹下批量改动IP
- Android 二级串联菜单的实现过程
- iOS高德地图的自动化配置
- nyoj129树的判定,并查集(注意有向树的所有条件)
- Java系列: JAVA字符串格式化-String.format()的使用(zz)
- (总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解
- Android出现“Read-only file system”解决办法
- 流结束符Ctrl+Z
- UVa 825 - Walking on the Safe Side
- Mac 下配置环境变量造成命令行命令无法使用的解决方法
- java编码解码过程
- 如果将synthesize省略,语义特性声明为assign retain copy时,自己实现setter和getter方法
- root 帐户无法登陆解决办法
- Cocos2d-x3.0 Button