论自作音乐播放器涉及知识点总结

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");
原文地址:https://www.cnblogs.com/1426837364qqcom/p/5397828.html