欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > Android >内容正文

Android

Android之MediaPlayer播放音乐并实现进度条实例

发布时间:2025/6/15 Android 58 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Android之MediaPlayer播放音乐并实现进度条实例 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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

1、效果图:


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



2、布局文件main.xml

[html] view plain copy
  • <?xml version="1.0" encoding="utf-8"?>  
  • <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  •     android:layout_width="fill_parent"  
  •     android:layout_height="fill_parent"  
  •     android:orientation="vertical" >  
  •     <TextView   
  •         android:layout_width="wrap_content"  
  •         android:layout_height="wrap_content"  
  •         android:text="歌曲名:"/>  
  •     <TextView   
  •         android:layout_width="wrap_content"  
  •         android:layout_height="wrap_content"  
  •         android:text="blueflawer.mp3"/>  
  •     <Button   
  •         android:layout_width="wrap_content"  
  •         android:layout_height="wrap_content"  
  •         android:text="播放"  
  •         android:id="@+id/play_pause"/>  
  •     <Button   
  •         android:layout_width="wrap_content"  
  •         android:layout_height="wrap_content"  
  •         android:text="重置"  
  •         android:id="@+id/reset"/>  
  •     <SeekBar   
  •         android:layout_width="fill_parent"  
  •         android:layout_height="wrap_content"  
  •         android:id="@+id/seekbar"/>  
  • </LinearLayout>  
  • 3、activity类 [java] view plain copy
  • package cn.csdn.activity;  
  •   
  • import java.io.File;  
  • import java.io.IOException;  
  • import java.util.Timer;  
  • import java.util.TimerTask;  
  •   
  • import android.app.Activity;  
  • import android.media.MediaPlayer;  
  • import android.os.Bundle;  
  • import android.os.Environment;  
  • import android.view.View;  
  • import android.view.View.OnClickListener;  
  • import android.widget.Button;  
  • import android.widget.SeekBar;  
  • import android.widget.SeekBar.OnSeekBarChangeListener;  
  •   
  • public class MyPlayerActivity extends Activity {  
  •     private Button play_pause, reset;  
  •     private SeekBar seekbar;  
  •     private boolean ifplay = false;  
  •     private MediaPlayer player = null;  
  •     private String musicName = "blueflawer.mp3";  
  •     private boolean iffirst = false;  
  •     private Timer mTimer;    
  •     private TimerTask mTimerTask;   
  •     private boolean isChanging=false;//互斥变量,防止定时器与SeekBar拖动时进度冲突   
  •     public void onCreate(Bundle savedInstanceState) {  
  •         super.onCreate(savedInstanceState);  
  •         setContentView(R.layout.main);  
  •         player = new MediaPlayer();  
  •         findViews();// 各组件  
  •     }  
  •   
  •     private void findViews() {  
  •         play_pause = (Button) findViewById(R.id.play_pause);  
  •         reset = (Button) findViewById(R.id.reset);  
  •         play_pause.setOnClickListener(new MyClick());  
  •         reset.setOnClickListener(new MyClick());  
  •   
  •         seekbar = (SeekBar) findViewById(R.id.seekbar);  
  •         seekbar.setOnSeekBarChangeListener(new MySeekbar());  
  •     }  
  •   
  •     class MyClick implements OnClickListener {  
  •         public void onClick(View v) {  
  •             File file = new File(Environment.getExternalStorageDirectory(),  
  •                     musicName);  
  •             // 判断有没有要播放的文件  
  •             if (file.exists()) {  
  •                 switch (v.getId()) {  
  •                 case R.id.play_pause:  
  •                     if (player != null && !ifplay) {  
  •                         play_pause.setText("暂停");  
  •                         if (!iffirst) {  
  •                             player.reset();  
  •                             try {  
  •                                 player.setDataSource(file.getAbsolutePath());  
  •                                 player.prepare();// 准备  
  •   
  •                             } catch (IllegalArgumentException e) {  
  •                                 e.printStackTrace();  
  •                             } catch (IllegalStateException e) {  
  •                                 e.printStackTrace();  
  •                             } catch (IOException e) {  
  •                                 e.printStackTrace();  
  •                             }  
  •                             seekbar.setMax(player.getDuration());//设置进度条  
  •                             //----------定时器记录播放进度---------//    
  •                             mTimer = new Timer();    
  •                             mTimerTask = new TimerTask() {    
  •                                 @Override    
  •                                 public void run() {     
  •                                     if(isChanging==true) {   
  •                                         return;    
  •                                     }  
  •                                     seekbar.setProgress(player.getCurrentPosition());  
  •                                 }    
  •                             };   
  •                             mTimer.schedule(mTimerTask, 010);   
  •                             iffirst=true;  
  •                         }  
  •                         player.start();// 开始  
  •                         ifplay = true;  
  •                     } else if (ifplay) {  
  •                         play_pause.setText("继续");  
  •                         player.pause();  
  •                         ifplay = false;  
  •                     }  
  •                     break;  
  •                 case R.id.reset:  
  •                     if (ifplay) {  
  •                         player.seekTo(0);  
  •                     } else {  
  •                         player.reset();  
  •                         try {  
  •                             player.setDataSource(file.getAbsolutePath());  
  •                             player.prepare();// 准备  
  •                             player.start();// 开始  
  •                         } catch (IllegalArgumentException e) {  
  •                             e.printStackTrace();  
  •                         } catch (IllegalStateException e) {  
  •                             e.printStackTrace();  
  •                         } catch (IOException e) {  
  •                             e.printStackTrace();  
  •                         }  
  •                     }  
  •                     break;  
  •                 }  
  •             }  
  •         }  
  •     }  
  •     //进度条处理  
  •     class MySeekbar implements OnSeekBarChangeListener {  
  •         public void onProgressChanged(SeekBar seekBar, int progress,  
  •                 boolean fromUser) {  
  •         }  
  •   
  •         public void onStartTrackingTouch(SeekBar seekBar) {  
  •             isChanging=true;    
  •         }  
  •   
  •         public void onStopTrackingTouch(SeekBar seekBar) {  
  •             player.seekTo(seekbar.getProgress());  
  •             isChanging=false;    
  •         }  
  •   
  •     }  
  •     //来电处理  
  •     protected void onDestroy() {  
  •         if(player != null){  
  •             if(player.isPlaying()){  
  •                 player.stop();  
  •             }  
  •             player.release();  
  •         }  
  •         super.onDestroy();  
  •     }  
  •   
  •     protected void onPause() {  
  •         if(player != null){  
  •             if(player.isPlaying()){  
  •                 player.pause();  
  •             }  
  •         }  
  •         super.onPause();  
  •     }  
  •   
  •     protected void onResume() {  
  •         if(player != null){  
  •             if(!player.isPlaying()){  
  •                 player.start();  
  •             }  
  •         }  
  •         super.onResume();  
  •     }  
  •   

  • 总结

    以上是生活随笔为你收集整理的Android之MediaPlayer播放音乐并实现进度条实例的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。