目标:获取手机中的歌曲,并使用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;    }}

更多相关文章

  1. Android的WebView如何播放视频
  2. android studio 60音乐播放器 下载音乐
  3. Android(安卓)关闭后台音频播放
  4. Android之SurfaceView窗口/全屏播放
  5. android创建通知栏(java版)
  6. Android:下载网络图片
  7. 在Android中创建文件
  8. Android:SQLiteOpenHelper
  9. android mediaplayer 播放流媒体 m3u8

随机推荐

  1. 关于webview中java调用js函数(解决loadUrl
  2. 已经安装了JDK,并且配置好了环境,在cmd中输
  3. Java:IntelliJ想法生成的代码错误地为所有
  4. 了解数组类型和使用java.util.Arrays类
  5. 如何在另一个类中使用静态类中的变量?
  6. JSP中--->中文乱码问题
  7. 在Java中修剪可能的字符串前缀
  8. java7 switch语句使用字符串
  9. 如何在Spring中读取具有相同键的多个属性
  10. java中的异常处理