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"/>
阅读全文
0 0
- mediaplayer
- mediaplayer
- mediaplayer
- MediaPlayer
- MediaPlayer
- MediaPlayer
- MediaPlayer
- mediaplayer
- MediaPlayer
- MediaPlayer
- mediaplayer
- MediaPlayer
- MediaPlayer
- Mediaplayer
- MediaPlayer
- MediaPlayer
- MediaPlayer
- MediaPlayer
- C语言实验——打印金字塔
- 辗转相除法原理
- mysql的主从复制的搭建
- SQL各种连接(左连接、右连接、内连接、自连接、全连接)
- JavaScript程序设计——小程序
- Mediaplayer
- 入门训练 圆的面积
- Course List for Student
- 数据结构之单链表实践练习
- Ubuntu 下UFW防火墙简单设置
- Scope参数错误或没有Scope权限
- PHP数据类型
- qt中关于设置颜色(QPalette和QPixmap)
- HTML&CSS实验(6)