• Android 第三次作业


    音乐播放器

    一、实现的功能

    • 实现播放,暂停,停止,播放上一首,下一首功能
    • 显示播放列表
    • 至少可以播放3首歌曲

    二、界面截图

    视频:

    https://coding.net/u/yangguangyoyo/p/Music/git/blob/master/2019-01-04_22_52_45_tmp_tmp.mp4

    apk运行结果:

    三、部分实现代码

    1:切分(获取歌名、歌手、播放时间)

     if (song.song.contains("-")) {
          String[] str = song.song.split("-");
          str[0]=str[0].trim();
          str[1]=str[1].trim();
          song.singer = str[0];
          song.song = str[1];
    }
    list.add(song);

    2:获取歌曲的各部分信息

    song.song = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME));//获取歌名
    song.singer = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));//获取歌手
    song.path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));/获取歌曲所在的路径
    song.duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));//获取时间
    song.size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE));

    3:设置时间输出格式

    //设置当前播放进度、播放总进度的时间格式
    private String parseTime(int oldTime) {
    SimpleDateFormat sdf = new SimpleDateFormat("mm:ss");// 时间格式
    String newTime = sdf.format(new Date(oldTime));
    return newTime;
    }

    4:切换图片(播放与暂停图片的切换)

    //切换图片(播放/暂停的图标的切换)
        public void setCut_picture(){
            if(cut_picture){
                play.setImageResource(R.drawable.play);
            }else{
                play.setImageResource(R.drawable.pause);
            }
            cut_picture = !cut_picture;
    }

    5:播放初始化歌曲

    //初始化,歌曲选择第一首歌曲
    try {
    mediaPlayer.setDataSource(list.get(0).path);//在列表中寻找poistion位置的歌曲的路径
    mediaPlayer.prepare();
    } catch (IOException e) {
    e.printStackTrace();
    }
    mSeekBar.setProgress(0);//切歌一开始设置进度为0
    mSeekBar.setMax(mediaPlayer.getDuration());//设置进度条的总长度为音乐的总时间
    Total_time.setText(parseTime(mediaPlayer.getDuration()));//获取音乐的总时间
    updateProgress();//更新进度条

    6:播放,暂停,停止,播放上一首,下一首功能

    点击按钮响应:

    stop.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {//重置按钮的响应
    if(mediaPlayer.isPlaying()){
    mediaPlayer.reset();//停止播放
    try {
    mediaPlayer.reset();//重置歌曲
    mediaPlayer.setDataSource(list.get(Position).path);//在列表中寻找poistion位置的歌曲的路径
    mediaPlayer.prepare();
    mediaPlayer.start();//开始播放
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    });


    
    
    @Override
    public void onClick(View view) {
    switch(view.getId()){
    case R.id.last_song://上一曲
    Cut_song(--Position);
    break;
    case R.id.play://播放/停止 包括图标的切换
    if (mediaPlayer.isPlaying()) {
    mediaPlayer.pause();//暂停
    play.setImageResource(R.drawable.play);
    cut_picture = false;
    } else {
    mediaPlayer.start();//播放
    play.setImageResource(R.drawable.pause);
    cut_picture = true;
    }
    break;
    case R.id.next_song:
    Cut_song(++Position);
    break;
    }
    }

    7:切歌

    //切歌
    private void Cut_song(int position){
    //设置切歌后显示的按钮图标为播放图标
    play.setImageResource(R.drawable.pause);
    cut_picture = true;

    //防止索引歌曲列表时超界,形成一个圈
    if (position<0){
    Position = position =list.size()-1;
    }else if (position>list.size()-1){
    Position = position=0;
    }

    if (mediaPlayer==null){
    mediaPlayer=new MediaPlayer();
    }
    try {
    mediaPlayer.reset();//重置歌曲
    mediaPlayer.setDataSource(list.get(Position).path);//在列表中寻找poistion位置的歌曲的路径
    mediaPlayer.prepare();
    mediaPlayer.start();//开始播放
    } catch (IOException e) {
    e.printStackTrace();
    }

    mSeekBar.setProgress(0);//切歌一开始设置进度为0
    mSeekBar.setMax(mediaPlayer.getDuration());//设置进度条的总长度为音乐的总时间
    Total_time.setText(parseTime(mediaPlayer.getDuration()));//获取音乐的总时间
    updateProgress();//更新进度条
    }

    8:进度条的更新

    /更新进度条代码
    private void updateProgress() {
    Message msg = Message.obtain();
    int progress = mediaPlayer.getCurrentPosition();
    msg.arg1 = progress;
    mHandler.sendMessageDelayed(msg, INTERNAL_TIME);
    }

    9:进度条的实现(手动调节的实现)

    
    
    @Override
    public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
    }
    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
    }
    // 当手停止拖拽进度条时执行该方法
    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
    int progress = seekBar.getProgress();
    cut_picture = false;
    mediaPlayer.seekTo(progress);
    setCut_picture();
    }

    四、代码链接

    五、APK链接

  • 相关阅读:
    震撼!一组你从未见过的惊艳照片(45图)
    看明白了这个故事不精神分裂算你厉害
    关于无法把程序(Adobe Fireworks CS5)添加到打开方式的解决办法
    打伞
    引用视频全屏播放代码
    居家生活实用生活小窍门集锦
    《西游记第一百零一回》第一百零一回观(转)
    保鲜膜的28种妙用!
    20155324 《信息安全系统设计基础》课程总结
    2017-2018-1 20155324 《信息安全系统设计基础》第十四周学习总结
  • 原文地址:https://www.cnblogs.com/dengwang/p/10105127.html
Copyright © 2020-2023  润新知