音乐播放上一首下一首 //借鉴

来源:互联网 发布:东北师大网络教育2018 编辑:程序博客网 时间:2024/06/09 13:54
package com.example.mediaplayer_demo;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import com.example.adapter.MyAdapter;
import com.example.bean.MusicBean;

import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.media.MediaPlayer.OnSeekCompleteListener;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.R.integer;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;

/**
 *
 * 音乐播放器
 */
public class MainActivity extends Activity implements OnPreparedListener,
        OnClickListener {

    private ListView list_view;
    private ImageView pre;
    private ImageView play;
    private ImageView next;
    private ImageView iamge_music;
    private TextView text_name;
    private TextView text_time;
    private SeekBar seek_bar;
    private List<MusicBean> list;
    // 定义一个值,,记录当前播放的歌曲,在集合中的索引
    private int index = 0;
    private MediaPlayer player;
    // 定义一个状态值,,记录是否处于暂停状态
    private boolean flag = false;
    private Timer timer;
    private TimerTask task;
    private int duration;
    private Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {

            if (msg.what == 0) {
                // 获取到的是 毫秒 ...应该格式化
                int c = (Integer) msg.obj;
                // 格式化--->date.format(new Date(duration));
                text_time.setText(date.format(new Date(c)) + "/"
                        + date.format(new Date(duration)));
                // 进度条随时更新 --->已知:总时长,当前播放时间,最大值1000 > c*1000/duration
                seek_bar.setProgress(c * 1000 / duration);
            }
        };
    };
    private SimpleDateFormat date;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 去掉标题栏
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        // 加载布局
        setContentView(R.layout.activity_main);
        // 找到控件
        findView();
        // 展示音乐列表
        list = new ArrayList<MusicBean>();
        list.add(new MusicBean("歌曲1", Environment.getExternalStorageDirectory()
                + "/a.mp3", R.drawable.a));
        list.add(new MusicBean("歌曲2", Environment.getExternalStorageDirectory()
                + "/fade.mp3", R.drawable.b));
        list.add(new MusicBean("歌曲3", Environment.getExternalStorageDirectory()
                + "/hua.mp3", R.drawable.c));
        list.add(new MusicBean("歌曲4", Environment.getExternalStorageDirectory()
                + "/roar.mp3", R.drawable.d));
        list.add(new MusicBean("歌曲5", Environment.getExternalStorageDirectory()
                + "/sugar.mp3", R.drawable.e));
        // 给listview适配数据---创建适配器
        MyAdapter adapter = new MyAdapter(list, MainActivity.this);
        list_view.setAdapter(adapter);
        // 创建MediaPlayer对象
        player = new MediaPlayer();
        // 创建一个计时器
        timer = new Timer();
        // 创建时间格式化的类
        date = new SimpleDateFormat("mm:ss");
        // 给上一曲,下一曲,暂停设置点击监听
        pre.setOnClickListener(this);
        play.setOnClickListener(this);
        next.setOnClickListener(this);

        // 点击条目播放音乐
        list_view.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // 给index赋值
                index = position;
                // 播放音乐
                play_Music();
            }

        });
        // 拖动进度条,,歌曲跟着更新
        seek_bar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub
            }
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub
            }
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress,
                    boolean fromUser) {
                // 进度发生改变的时候,,,歌曲变化
                if (player != null && fromUser) {
                    //progress*duration/1000
                    player.seekTo(progress*duration/1000);
                }
            }
        });
        //自动下一首
        player.setOnCompletionListener(new OnCompletionListener() {
            
            @Override
            public void onCompletion(MediaPlayer mp) {
                //播放完成自动下一曲
                next();
            }
        });
    }
    /**
     * 播放音乐的方法
     */
    private void play_Music() {

        try {
            // 重置资源
            player.reset();
            // 加载音乐资源
            player.setDataSource(list.get(index).getPath());
            // 准备播放音乐
            player.prepareAsync();// 异步
            // 准备播放完成的监听
            player.setOnPreparedListener(this);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    /**
     * 找控件的方法
     */
    private void findView() {
        list_view = (ListView) findViewById(R.id.list_view);
        pre = (ImageView) findViewById(R.id.pre);
        play = (ImageView) findViewById(R.id.play);
        next = (ImageView) findViewById(R.id.next);
        iamge_music = (ImageView) findViewById(R.id.iamge_music);
        text_name = (TextView) findViewById(R.id.text_name);
        text_time = (TextView) findViewById(R.id.text_time);
        seek_bar = (SeekBar) findViewById(R.id.seek_bar);
    }

    /**
     * 播放完成的监听
     */
    @Override
    public void onPrepared(MediaPlayer mp) {
        // 播放音乐
        if (player != null) {
            player.start();
            // 给歌曲名字赋值,,头像赋值
            text_name.setText(list.get(index).getName());
            iamge_music.setImageResource(list.get(index).getImage());
            // 更改播放按钮的图片
            play.setImageResource(R.drawable.pause);
            // 更新时间
            // 获取歌曲的总时长
            duration = player.getDuration();
            task = new TimerTask() {
                @Override
                public void run() {
                    // 获取到歌曲当前播放的时间
                    int current = player.getCurrentPosition();

                    Message msg = Message.obtain();
                    msg.what = 0;
                    msg.obj = current;
                    handler.sendMessage(msg);
                }
            };
            timer.schedule(task, 0, 1000);
        }
    }

    /**
     * 点击切换歌曲的按钮监听
     */
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.play:
            // 暂停 1.音乐正在播放时候--->暂停 2.歌曲正处于暂停-->2.1已经播放过,,暂停中2.2 压根就没播放过
            if (player != null && player.isPlaying()) {
                // 暂停
                player.pause();
                // 更改按钮的图片
                play.setImageResource(R.drawable.play);
                // 更改状态值
                flag = true;
            } else {
                if (flag) {// 2.1
                    // 继续播放就可以
                    player.start();
                    // 更改按钮的图片
                    play.setImageResource(R.drawable.pause);
                } else {
                    // 重新加载资源
                    play_Music();
                }
            }
            break;
        case R.id.pre:
            // 上一首
            pre();
            break;
        case R.id.next:
            // 下一曲
            next();
            break;

        default:
            break;
        }
    }

    /**
     * 下一曲的方法
     */
    private void next() {

        index++;
        index = index % list.size();
        // 重新播放
        play_Music();
    }

    /**
     * 上一首的方法
     */
    private void pre() {
        // 上一曲,,,index--;
        if (index <= 0) {
            index = list.size();
        }
        index--;
        // 播放歌曲
        play_Music();
    }
}

原创粉丝点击