Android入门教程 MediaPlayer教程【使用进度条】
16lz
2021-12-04
目标:获取手机中的歌曲,并使用MediaPlayer播放歌曲
第一步:创建适配器控件
第二步:创建适配器
第三步:绑定适配器
第四步:为MediaPlayer创建播放、暂停、上一曲、下一曲、停止方法
第五步:使用Thread和SeekBar实现进度条
MainActivity
public class MainActivity extends Activity { private ListView musicListView; // 资源获取器 private ContentResolver resolver; private List musicList = new ArrayList(); private MediaPlayer mediaPlayer; private int currentPosition; private Button pre; private Button next; private Button play; private Button stop; private SeekBar seekbar; private Thread thread; //线程标志位 private boolean isStop; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 实例化listview musicListView = (ListView) findViewById(R.id.musiclistview); // 初始化数据 initData(); // 创建适配器 MusicAdapter adapter = new MusicAdapter(this, musicList); // 绑定适配器 musicListView.setAdapter(adapter); // 实例化MediaPlayer mediaPlayer = new MediaPlayer(); // 设置点击事件 musicListView.setOnItemClickListener(new OnItemClickListener() { // parent--父视图 // view——当前点击的View // position——当前点击的位置 // id——当前点击项的ID @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { currentPosition = position; play(); play.setText("暂停"); } }); initView(); seekbar = (SeekBar) findViewById(R.id.seekbar); } private void initView() { pre = (Button) findViewById(R.id.prebtn); next = (Button) findViewById(R.id.nextbtn); play = (Button) findViewById(R.id.playbtn); stop = (Button) findViewById(R.id.stopbtn); // 上一曲 pre.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { previous(); } }); // 下一曲 next.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { next(); } }); // 播放 play.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (mediaPlayer.isPlaying()) { // 如果正在播放,则暂停,并把按钮上的文字设置成“播放” mediaPlayer.pause(); play.setText("播放"); } else { // 如果已暂停,则播放,并把按钮上的文字设置成“暂停” mediaPlayer.start(); play.setText("暂停"); } } }); // 停止 stop.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mediaPlayer.stop(); play.setText("播放"); // 设置进度条归零 seekbar.setProgress(0); //线程标志位,线程停止 isStop = true; } }); } /** * 初始化数据,获取手机中的音乐文件,并添加至list列表中 */ private void initData() { // 创建ContentResolver resolver = getContentResolver(); // 创建游标 Cursor cursor = resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null); // 把光标移到第一位 cursor.moveToFirst(); for (int i = 0; i < cursor.getCount(); i++) { // 获取歌曲名字 String name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)); // 获取歌手名字 String singer = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)); // 获取歌曲的路径 String path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)); // 新建一个MusicVO对象 MusicVO music = new MusicVO(); music.setName(name); music.setSinger(singer); music.setPath(path); musicList.add(music); //游标下移 cursor.moveToNext(); } // 关闭游标,释放资源 cursor.close(); } /** * 播放 */ private void play() { isStop = false; try { // 重置 mediaPlayer.reset(); // 设置音乐播放源 mediaPlayer.setDataSource(musicList.get(currentPosition).getPath()); // 准备 mediaPlayer.prepare(); // 启动 mediaPlayer.start(); // 设置播放结束后自动循环播放 mediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { next(); } }); // 设置seekbar的最大值 seekbar.setMax(mediaPlayer.getDuration()); // 创建一个线程 thread = new Thread(new SeekBarThread()); // 启动线程 thread.start(); } catch (IllegalArgumentException | SecurityException | IllegalStateException | IOException e) { e.printStackTrace(); } } /** * 下一曲 */ private void next() { if (currentPosition == musicList.size() - 1) { currentPosition = 0; } else { currentPosition = currentPosition + 1; } play(); } /** * 上一曲 */ private void previous() { if (currentPosition == 0) { currentPosition = musicList.size() - 1; } else { currentPosition = currentPosition - 1; } play(); } // 自定义的线程 private class SeekBarThread implements Runnable { @Override public void run() { while (mediaPlayer != null && isStop == false) { // 将SeekBar位置设置到当前播放位置 seekbar.setProgress(mediaPlayer.getCurrentPosition()); try { // 每100毫秒更新一次位置 Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } }}
MyAdapter
public class MusicAdapter extends BaseAdapter{ private Context mContext; private List mList; public MusicAdapter(Context context,List list) { this.mContext = context; this.mList = list; } @Override public int getCount() { return mList.size(); } @Override public Object getItem(int position) { return mList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = LayoutInflater.from(mContext); View v = inflater.inflate(R.layout.item, null); TextView nameText = (TextView) v.findViewById(R.id.name_view); TextView singerText = (TextView) v.findViewById(R.id.singer_view); nameText.setText(mList.get(position).getName()); singerText.setText(mList.get(position).getSinger()); return v; }}
更多相关文章
- Android的WebView如何播放视频
- android studio 60音乐播放器 下载音乐
- Android(安卓)关闭后台音频播放
- Android之SurfaceView窗口/全屏播放
- android创建通知栏(java版)
- Android:下载网络图片
- 在Android中创建文件
- Android:SQLiteOpenHelper
- android mediaplayer 播放流媒体 m3u8