Mediaplayer

来源:互联网 发布:弗莱生涯数据 编辑:程序博客网 时间:2024/05/18 00:36
package com.ning.mediaplayer;import android.database.Cursor;import android.media.MediaPlayer;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.provider.MediaStore;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.ListView;import android.widget.SeekBar;import android.widget.Toast;import java.io.IOException;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity implements View.OnClickListener, SeekBar.OnSeekBarChangeListener {    /**     * 1、查询全部歌曲信息并展示(ContentProvider数据库)     * 2、点击对应歌曲播放/暂停     * 3、播放/暂停按钮。上一首/下一首     * 注意:设置外部存储权限     * build.gradle中targetSdkVersion 22     */    private ListView main_list;    private List<bean> mlist;    private Button main_shang;    private Button main_zhong;    private Button main_xia;    private MediaPlayer mMediaPlayer;    // 记录当前播放歌曲的位置    private int mCurrentPosition;    private SeekBar main_seekbar;    private Handler handler=new Handler(new Handler.Callback() {        @Override        public boolean handleMessage(Message msg) {                //获取当前进度并展示给进度条                int arg1 = msg.arg1;                //展示当前进度和时间                int currentPosition = mMediaPlayer.getCurrentPosition();                main_seekbar.setProgress(currentPosition);                updateProgress();                return true;        }    }){    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        mlist = getData();        ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, mlist);        main_list.setAdapter(adapter);        main_seekbar.setOnSeekBarChangeListener(this);        main_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                mCurrentPosition = position;                changeMusic(mCurrentPosition);            }        });    }    private void initView() {        main_list = (ListView) findViewById(R.id.main_list);        main_shang = (Button) findViewById(R.id.main_shang);        main_shang.setOnClickListener(this);        main_zhong = (Button) findViewById(R.id.main_zhong);        main_zhong.setOnClickListener(this);        main_xia = (Button) findViewById(R.id.main_xia);        main_xia.setOnClickListener(this);        main_seekbar = (SeekBar) findViewById(R.id.main_seekbar);        main_seekbar.setOnClickListener(this);    }    public List<bean> getData() {        List<bean> list = new ArrayList<>();        Cursor query = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);        int _id = query.getColumnIndex(MediaStore.Audio.Media._ID);        int titleindex = query.getColumnIndex(MediaStore.Audio.Media.TITLE);        int artistIndex = query.getColumnIndex(MediaStore.Audio.Media.ARTIST);        int dataIndex = query.getColumnIndex(MediaStore.Audio.Media.DATA);        while (query.moveToNext()) {            long aLong = query.getLong(_id);            String string = query.getString(titleindex);            String string1 = query.getString(artistIndex);            String string2 = query.getString(dataIndex);            bean bean = new bean(aLong, string2, string, string1);            list.add(bean);        }        for (bean bean : list) {            Toast.makeText(this, bean + "", Toast.LENGTH_SHORT).show();        }        return list;    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.main_shang:                changeMusic(--mCurrentPosition);                break;            case R.id.main_zhong:                // 首次点击播放按钮,默认播放第0手                if (mMediaPlayer == null) {                    mCurrentPosition = 0;                } else {                    if (mMediaPlayer.isPlaying()) {                        mMediaPlayer.pause();                    } else {                        mMediaPlayer.start();                    }                }                break;            case R.id.main_xia:                changeMusic(++mCurrentPosition);                break;        }    }    //切歌    private void changeMusic(int position) {        if (position < 0) {            position = mlist.size() - 1;        } else if (position > mlist.size() - 1) {            position = 0;        }        if (mMediaPlayer == null) {            mMediaPlayer = new MediaPlayer();        }        //切割前先释放掉以前的资源 不然会 重复播放        mMediaPlayer.reset();        try {            //设置播放缘  并且设置路径            mMediaPlayer.setDataSource(mlist.get(position).getUri());            //开始播放前的准备工作    ,加载多媒体资源,获取相关的信息            mMediaPlayer.prepare();            //然后给他开始播放            mMediaPlayer.start();        } catch (IOException e) {            e.printStackTrace();            Toast.makeText(this, "播放错误", Toast.LENGTH_SHORT).show();        }        main_seekbar.setProgress(0);        main_seekbar.setMax(mMediaPlayer.getDuration());        updateProgress();    }    private void updateProgress() {        //使用handler发送消息没秒一次        Message obtain = Message.obtain();        // 使用MediaPlayer获取当前播放时间除以总时间的进度        int progress = mMediaPlayer.getCurrentPosition();        obtain.arg1=progress;        handler.sendMessageDelayed(obtain,INTERNAL_TIME);    }    private static final int INTERNAL_TIME = 1000;// 音乐进度间隔时间    @Override    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {    }    @Override    public void onStartTrackingTouch(SeekBar seekBar) {    }    // 当手停止拖拽进度条时执行该方法    // 获取拖拽进度    // 将进度对应设置给MediaPlayer    @Override    public void onStopTrackingTouch(SeekBar seekBar) {        int progress = seekBar.getProgress();        mMediaPlayer.seekTo(progress);    }}
package com.ning.mediaplayer;/** * Created by 行歌 on 2017/11/15. */public class bean {    private long _id;    private String Uri;    private String title;    private String artist;    public bean(long _id, String uri, String title, String artist) {        this._id = _id;        Uri = uri;        this.title = title;        this.artist = artist;    }    public long get_id() {        return _id;    }    public void set_id(long _id) {        this._id = _id;    }    public String getUri() {        return Uri;    }    public void setUri(String uri) {        Uri = uri;    }    public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }    public String getArtist() {        return artist;    }    public void setArtist(String artist) {        this.artist = artist;    }    @Override    public String toString() {        return " 标题=" + title + '\'' +                "艺术家=" + artist + '\'' +                '}';    }}
如果先要显示时间就写一个方法
   // 解析时间
    private String parseTime(int oldTime) {        SimpleDateFormat sdf = new SimpleDateFormat("mm:ss");// 时间格式        String newTime = sdf.format(new Date(oldTime));        return newTime;    }
这是设置时间
    mCurrentTimeTv.setText(parseTime(progress));
 mTotalTimeTv.setText(parseTime(mMediaPlayer.getDuration()));
当然还有一个外部存储权限
<uses-permission android:name="android.permission.READ_CONTACTS"/>
原创粉丝点击