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

来源:互联网 发布:seo是什么职位 编辑:程序博客网 时间:2024/06/06 19:52
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");

 

0 0