android实现音乐播放器进度条效果

android实现音乐播放器进度条效果,第1张

概述本文实例为大家分享了android实现音乐播放器进度条效果的具体代码,供大家参考,具体内容如下

本文实例为大家分享了androID实现音乐播放器进度条效果的具体代码,供大家参考,具体内容如下

效果图

依赖3个对象

MediaPlayer:实现音乐播放,暂停,缓冲。

Seekbar:滑动的进度条。

java.util.Timer:定时器,时时更新进度条。

main.xml样式文件

<TextVIEw  androID:layout_wIDth="fill_parent"  androID:layout_height="wrap_content"  androID:text="@string/hello" />   <EditText  androID:ID="@+ID/mediafilename"  androID:layout_wIDth="match_parent"  androID:text="gangstabop.mp3"  androID:layout_height="wrap_content" >  <requestFocus />  </EditText>    <linearLayout  androID:ID="@+ID/linearbutton"  androID:layout_wIDth="match_parent"  androID:layout_height="wrap_content" >   <button   androID:ID="@+ID/playbutton"   androID:layout_wIDth="wrap_content"   androID:layout_height="wrap_content"   androID:text="@string/stop" />   <Seekbar   androID:ID="@+ID/playSeekbar"   androID:layout_wIDth="140px"   androID:layout_height="wrap_content"   androID:layout_marginleft="3px"   androID:layout_margintop="5px" />   <button   androID:ID="@+ID/replaybutton"   androID:layout_wIDth="wrap_content"   androID:layout_height="wrap_content"   androID:layout_marginleft="3px"   androID:text="@string/replay" />  </linearLayout>

Activity实现代码

/**  * @CreateDate 2015-2-3  * @Author hubiao  * @Title 音乐播放器  */ public class MediaActivity extends Activity {  private MediaPlayer mediaPlayer;//媒体播放器  private button playbutton;  private button replaybutton ;  private boolean isCellPlay;/*在挂断电话的时候,用于判断是否为是来电时中断*/  private boolean isSeekbarChanging;//互斥变量,防止进度条与定时器冲突。  private int currentposition;//当前音乐播放的进度  private Seekbar seekbar;  private Timer timer;   private static final String TAG = "MediaActivity";   @OverrIDe  public voID onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentVIEw(R.layout.main);   //实例化媒体播放器  mediaPlayer = new MediaPlayer();    //监听滚动条事件  seekbar = (Seekbar) findVIEwByID(R.ID.playSeekbar);  seekbar.setonSeekbarchangelistener(new MySeekbar());    // 监听[播放或暂停]事件  playbutton= (button) findVIEwByID(R.ID.playbutton);  playbutton.setonClickListener(new PalyListener());    //监听[重播]事件  replaybutton= (button) findVIEwByID(R.ID.replaybutton);  replaybutton.setonClickListener(new OnClickListener() {   public voID onClick(VIEw v) {   mediaPlayer.reset();   currentposition = 0;   play();   }  });    //监听来电事件  TelephonyManager phoneyMana = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);  phoneyMana.Listen(new myPhonestateListener(),PhonestateListener.ListEN_CALL_STATE);  }  /*销毁时释资源*/  @OverrIDe  protected voID onDestroy() {  mediaPlayer.release();  timer.cancel();  timer = null;  mediaPlayer = null;  super.onDestroy();  }   /*播放或暂停事件处理*/  private class PalyListener implements OnClickListener {  public voID onClick(VIEw v) {   if(playbutton.getText().toString().equals("播放"))   {   currentposition = mediaPlayer.getCurrentposition();//记录播放的位置   mediaPlayer.stop();//暂停状态   playbutton.setText(R.string.stop);   timer.purge();//移除所有任务;   }   else{   mediaPlayer.reset();   play();   }  }  }   /*播放处理*/  private voID play() {  file media = new file("/mnt/sdcard/files/","bewithyou.mp3");//由于是练习,就把mp3名称固定了  Log.i(TAG,media.getabsolutePath());  if(media.exists())  {   try {   mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//设置音频类型   mediaPlayer.setDataSource(media.getabsolutePath());//设置mp3数据源   mediaPlayer.prepareAsync();//数据缓冲   /*监听缓存 事件,在缓冲完毕后,开始播放*/   mediaPlayer.setonPreparedListener(new OnPreparedListener() {    public voID onPrepared(MediaPlayer mp) {    mp.start();    mp.seekTo(currentposition);    playbutton.setText(R.string.play);    seekbar.setMax(mediaPlayer.getDuration());    }   });   //监听播放时回调函数   timer = new Timer();   timer.schedule(new TimerTask() {    @OverrIDe    public voID run() {    if(!isSeekbarChanging){     seekbar.setProgress(mediaPlayer.getCurrentposition());    }    }   },50);   } catch (Exception e) {   Toast.makeText(getApplicationContext(),R.string.playError,Toast.LENGTH_LONG).show();   e.printstacktrace();   System.out.println(e);   }  }  else{   Toast.makeText(getApplicationContext(),R.string.fileError,Toast.LENGTH_LONG).show();  }  }   /*来电事件处理*/  private class myPhonestateListener extends PhonestateListener  {  @OverrIDe  public voID onCallStateChanged(int state,String incomingNumber) {  switch (state) {   case TelephonyManager.CALL_STATE_RINGING://来电,应当停止音乐   if(mediaPlayer.isPlaying() && playbutton.getText().toString().equals("播放")){    currentposition = mediaPlayer.getCurrentposition();//记录播放的位置    mediaPlayer.stop();    isCellPlay = true;//标记这是属于来电时暂停的标记    playbutton.setText(R.string.stop);    timer.purge();//移除定时器任务;   }   break;   case TelephonyManager.CALL_STATE_IDLE://无电话状态   if(isCellPlay){    isCellPlay = false;    mediaPlayer.reset();    play();   }   break;   }  }  }   /*进度条处理*/  public class MySeekbar implements OnSeekbarchangelistener{   public voID onProgressChanged(Seekbar seekbar,int progress,boolean fromUser) {  }   /*滚动时,应当暂停后台定时器*/  public voID onStartTrackingtouch(Seekbar seekbar) {   isSeekbarChanging = true;  }  /*滑动结束后,重新设置值*/  public voID onStopTrackingtouch(Seekbar seekbar) {   isSeekbarChanging = false;   mediaPlayer.seekTo(seekbar.getProgress());  }  } } 

补充:

1.如果mp3在sd中,如播放失败,是否申请sd访问权限或mp3文件是否存在。
2.MediaPlayer对有个别的音频好像不太支持,如果路径正确,权限具备还无法播放,就考虑下音频问题。
3.本案例用到的权限。

<!-- 申请SD卡写入权限 --> <uses-permission androID:name="androID.permission.WRITE_EXTERNAL_STORAGE" /> <!--申请SD卡创建与权限 --> <uses-permission androID:name="androID.permission.MOUNT_UNMOUNT_fileSYstemS" /> <!-- 拦截号码权限 --> <uses-permission androID:name="androID.permission.READ_PHONE_STATE"/> 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

您可能感兴趣的文章:Android 七种进度条的样式Android中实现Webview顶部带进度条的方法android自定义进度条渐变色View的实例代码Android文件下载进度条的实现代码android ListView和ProgressBar(进度条控件)的使用方法Android中自定义进度条详解实例详解Android自定义ProgressDialog进度条对话框的实现Android编程之ProgressBar圆形进度条颜色设置方法Android三种方式实现ProgressBar自定义圆形进度条Android ProgressBar进度条使用详解 总结

以上是内存溢出为你收集整理的android实现音乐播放器进度条效果全部内容,希望文章能够帮你解决android实现音乐播放器进度条效果所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1142779.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存