Android入门教程 MediaPlayer教程【使用进度条】
来源:互联网 发布:傲剑弓箭升级数据大全 编辑:程序博客网 时间:2024/06/06 16:43
目标:获取手机中的歌曲,并使用MediaPlayer播放歌曲
第一步:创建适配器控件
第二步:创建适配器
第三步:绑定适配器
第四步:为MediaPlayer创建播放、暂停、上一曲、下一曲、停止方法
第五步:使用Thread和SeekBar实现进度条
MainActivity
public class MainActivity extends Activity { private ListView musicListView; // 资源获取器 private ContentResolver resolver; private List<MusicVO> musicList = new ArrayList<MusicVO>(); 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<MusicVO> mList; public MusicAdapter(Context context,List<MusicVO> 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 0
- Android入门教程 MediaPlayer教程【使用进度条】
- Android新手入手教程 -1.使用MediaPlayer播放声音
- Android入门教程 Fragment使用教程【实例讲解】
- Android MediaPlayer使用注意
- Android MediaPlayer使用注意
- Android MediaPlayer使用注意
- android mediaplayer使用注意
- Android Mediaplayer的使用
- android的mediaPlayer使用
- Android -MediaPlayer使用
- android MediaPlayer简单使用
- Android可显示数字进度的进度条使用教程
- Android使用系统自带的audioreorder和mediaplayer进行录音和播放,外加进度条的滚动!
- Android之MediaPlayer播放音乐并实现进度条实例
- Android之MediaPlayer播放音乐并实现进度条实例
- Android MediaPlayer基本使用方式
- Android MediaPlayer基本使用方式
- Android MediaPlayer基本使用方式
- sed 替换
- 基于SSTP协议的开源VPN客户端sstp-client在Ubuntu上的安装及测试
- mysql 5 mysql 5 技术内幕
- TestNG数据驱动
- Catalan数计算及应用
- Android入门教程 MediaPlayer教程【使用进度条】
- 右浮动位置问题
- 适用于 Mac OS 的 Paragon 驱动程序 | Seagate
- Android截包与反编译
- JavaScript 语言基础知识点总结(思维导图)
- Material Design之TextInputLayout使用示例
- Java基础之容器综述篇
- View的绘制流程
- 小学生算数测试