首先,说明我们是从sd卡里读文件,来播放文件!!

1、效果图:

提前工作,往sd卡里放音乐文件,如图:

2、布局文件main.xml

[html] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical" >
  6. <TextView
  7. android:layout_width="wrap_content"
  8. android:layout_height="wrap_content"
  9. android:text="歌曲名:"/>
  10. <TextView
  11. android:layout_width="wrap_content"
  12. android:layout_height="wrap_content"
  13. android:text="blueflawer.mp3"/>
  14. <Button
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. android:text="播放"
  18. android:id="@+id/play_pause"/>
  19. <Button
  20. android:layout_width="wrap_content"
  21. android:layout_height="wrap_content"
  22. android:text="重置"
  23. android:id="@+id/reset"/>
  24. <SeekBar
  25. android:layout_width="fill_parent"
  26. android:layout_height="wrap_content"
  27. android:id="@+id/seekbar"/>
  28. </LinearLayout>

3、activity类

[java] view plain copy
  1. package cn.csdn.activity;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.util.Timer;
  5. import java.util.TimerTask;
  6. import android.app.Activity;
  7. import android.media.MediaPlayer;
  8. import android.os.Bundle;
  9. import android.os.Environment;
  10. import android.view.View;
  11. import android.view.View.OnClickListener;
  12. import android.widget.Button;
  13. import android.widget.SeekBar;
  14. import android.widget.SeekBar.OnSeekBarChangeListener;
  15. public class MyPlayerActivity extends Activity {
  16. private Button play_pause, reset;
  17. private SeekBar seekbar;
  18. private boolean ifplay = false;
  19. private MediaPlayer player = null;
  20. private String musicName = "blueflawer.mp3";
  21. private boolean iffirst = false;
  22. private Timer mTimer;
  23. private TimerTask mTimerTask;
  24. private boolean isChanging=false;//互斥变量,防止定时器与SeekBar拖动时进度冲突
  25. public void onCreate(Bundle savedInstanceState) {
  26. super.onCreate(savedInstanceState);
  27. setContentView(R.layout.main);
  28. player = new MediaPlayer();
  29. findViews();// 各组件
  30. }
  31. private void findViews() {
  32. play_pause = (Button) findViewById(R.id.play_pause);
  33. reset = (Button) findViewById(R.id.reset);
  34. play_pause.setOnClickListener(new MyClick());
  35. reset.setOnClickListener(new MyClick());
  36. seekbar = (SeekBar) findViewById(R.id.seekbar);
  37. seekbar.setOnSeekBarChangeListener(new MySeekbar());
  38. }
  39. class MyClick implements OnClickListener {
  40. public void onClick(View v) {
  41. File file = new File(Environment.getExternalStorageDirectory(),
  42. musicName);
  43. // 判断有没有要播放的文件
  44. if (file.exists()) {
  45. switch (v.getId()) {
  46. case R.id.play_pause:
  47. if (player != null && !ifplay) {
  48. play_pause.setText("暂停");
  49. if (!iffirst) {
  50. player.reset();
  51. try {
  52. player.setDataSource(file.getAbsolutePath());
  53. player.prepare();// 准备
  54. } catch (IllegalArgumentException e) {
  55. e.printStackTrace();
  56. } catch (IllegalStateException e) {
  57. e.printStackTrace();
  58. } catch (IOException e) {
  59. e.printStackTrace();
  60. }
  61. seekbar.setMax(player.getDuration());//设置进度条
  62. //----------定时器记录播放进度---------//
  63. mTimer = new Timer();
  64. mTimerTask = new TimerTask() {
  65. @Override
  66. public void run() {
  67. if(isChanging==true) {
  68. return;
  69. }
  70. seekbar.setProgress(player.getCurrentPosition());
  71. }
  72. };
  73. mTimer.schedule(mTimerTask, 0, 10);
  74. iffirst=true;
  75. }
  76. player.start();// 开始
  77. ifplay = true;
  78. } else if (ifplay) {
  79. play_pause.setText("继续");
  80. player.pause();
  81. ifplay = false;
  82. }
  83. break;
  84. case R.id.reset:
  85. if (ifplay) {
  86. player.seekTo(0);
  87. } else {
  88. player.reset();
  89. try {
  90. player.setDataSource(file.getAbsolutePath());
  91. player.prepare();// 准备
  92. player.start();// 开始
  93. } catch (IllegalArgumentException e) {
  94. e.printStackTrace();
  95. } catch (IllegalStateException e) {
  96. e.printStackTrace();
  97. } catch (IOException e) {
  98. e.printStackTrace();
  99. }
  100. }
  101. break;
  102. }
  103. }
  104. }
  105. }
  106. //进度条处理
  107. class MySeekbar implements OnSeekBarChangeListener {
  108. public void onProgressChanged(SeekBar seekBar, int progress,
  109. boolean fromUser) {
  110. }
  111. public void onStartTrackingTouch(SeekBar seekBar) {
  112. isChanging=true;
  113. }
  114. public void onStopTrackingTouch(SeekBar seekBar) {
  115. player.seekTo(seekbar.getProgress());
  116. isChanging=false;
  117. }
  118. }
  119. //来电处理
  120. protected void onDestroy() {
  121. if(player != null){
  122. if(player.isPlaying()){
  123. player.stop();
  124. }
  125. player.release();
  126. }
  127. super.onDestroy();
  128. }
  129. protected void onPause() {
  130. if(player != null){
  131. if(player.isPlaying()){
  132. player.pause();
  133. }
  134. }
  135. super.onPause();
  136. }
  137. protected void onResume() {
  138. if(player != null){
  139. if(!player.isPlaying()){
  140. player.start();
  141. }
  142. }
  143. super.onResume();
  144. }
  145. }

Android之MediaPlayer播放音乐并实现进度条实例相关推荐

  1. 基于Qt的音乐播放器(一)添加音频文件,播放音乐,更新进度条

    2020博客之星年度总评选进行中:请为74号的狗子投上宝贵的一票! 我的投票地址:点击为我投票 文章目录 1.实现音频文件对话框(QFileDialog类) 2.实现音乐播放(QMediaPlayer ...

  2. Android中MediaPlayer播放音乐时自动中断的解决办法

    今天尝试在一个有SurfaceView持续绘图的程序里加入背景音乐,遇到一个故障: 音乐播10几秒就中止了,此后再无声响. 尝试更换为其他mp3文件,无果. 尝试将播放操作由子线程转到主线程,依然不行 ...

  3. Android音乐播放器开发(5)—播放界面(播放、暂停、上一首、下一首,顺序播放、随机播放、拖拽进度条…)

    1. 说明 源码已同步到Gitee仓库,Github仓库,觉得还不错的话帮忙点个"star"吧,非常感谢. Android播放器专栏其它文章: 服务端:Android音乐播放器开发 ...

  4. 基于Android的MediaPlayer的音乐播放器的封装

    基于Android的MediaPlayer的音乐播放器的封装 使用过android原生的mediaplayer来做音频播放的同学们,肯定是经历过一些痛苦的,因为android提供了一个状态机,确实这个 ...

  5. android第三方开源音频播放器,Android第三方开源SeekBarCompat:音乐类播放器等APP进度条常用...

     Android第三方开源SeekBarCompat:音乐类播放器等APP进度条常用 Android平台原生的SeekBar设计简单,然而,比如现在流行的一些音乐播放器的播放进度控制条,如果直接使 ...

  6. Android实现在线播放音乐

    Android实现在线播放音乐 2014年3月10日 hello,小伙伴们,3月份珊珊来迟的第一篇博客,最近小巫在找工作,加上又生病了,就没有太多精力去写博客了.今天拖着病发表一篇之前已经实现的在线播 ...

  7. android后台自播放音乐,Android实现后台播放音乐(Service方式)

    Android实现后台播放音乐(Service方式) 实现: 在res文件夹下添加raw文件夹,添加mp3/4格式的音乐文件 注意命名规则只能是a-z,0-9,和下划线_ 不能大写字母和- Andro ...

  8. Android之MediaPlayer播放网络视频的实现方法

    前段时间忙于工作,现在有时间来分享一下: 这篇文章主要介绍了Android的MediaPlayer播放网络视频的实现方法,是一个非常实用的功能,需要的朋友可以参考下 前面讲解了MediaPlayer播 ...

  9. Android使用MediaPlayer播放音频

    Android使用MediaPlayer播放音频 一.目标 二.最终实现 三.接下来 四.Finally 开发<Android高仿iOS Messages声音播放波形效果>完成后,Tape ...

最新文章

  1. html表格上下移动,Vue实现table上下移动功能示例
  2. 在linux中只将“桌面”修改成“Desktop”而系统仍然使用中文
  3. 求三角形最大面积(DP)
  4. Python 十七章 Web开发
  5. centos7配网卡_centos7配置网卡
  6. Pixhawk之姿态控制篇
  7. mysql pdo prepare_PDO::prepare
  8. html里content标签作用,HTML content 标签
  9. Ambari HDP 完整安装手册
  10. 第一次 Zul'grub
  11. 一个很可爱的二次元风格的个人技术博客
  12. 基于Matlab解决线性规划问题
  13. php 表格内边距,CSS 内边距
  14. Word 文档乱码-请选择使文档可读的编码 重启电脑-不是解决方法的解决方法(可能已经晚了)
  15. ELK+grok+华为防火墙USG6500会话日志
  16. MATLAB数字图像处理系统——边缘检测
  17. 机械臂matlab运动学仿真,matlab建立机械臂运动学仿真
  18. nose-report
  19. win10黑色护眼风格一波带走
  20. 写给《中国品牌日》:梦想不远 未来可期 为每一个农业品牌人鼓掌

热门文章

  1. 【数字信号处理】离散时间信号 ( 模拟信号、离散时间信号、数字信号 | 采样导致时间离散 | 量化导致幅度离散 )
  2. 【运筹学】表上作业法 ( 求初始基可行解 | 最小元素法 )
  3. 【Android 高性能音频】AAudio 音频流 读写操作 ( 音频流读写数据 | 阻塞时间设定 | 注意事项 | AAudioStream_read | AAudioStream_write )
  4. 使用expvar进行监控
  5. linux下部署svn服务器
  6. AsyncTask应用解析
  7. 2017 ACM/ICPC(西安)赛后总结
  8. 自己写getElementsByClass()方法
  9. mysql,int(5)、int(10)啥区别联系
  10. 游戏玩家行为基本模式的初探小汇