Android-简单音乐播放器


Android-简单音乐播放器:

//目录结构


//项目运行结果


//只一个主Activity,里面代码也很简单。至于布局这些就相当简单了,我就不写了。

  1. package sn.len.music;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5.   
  6. import android.app.Activity;  
  7. import android.media.MediaPlayer;  
  8. import android.os.Bundle;  
  9. import android.os.Environment;  
  10. import android.util.Log;  
  11. import android.view.View;  
  12. import android.view.View.OnClickListener;  
  13. import android.widget.Button;  
  14. import android.widget.EditText;  
  15.   
  16. public class MusicPlayerActivity extends Activity implements OnClickListener   
  17. {  
  18.     private EditText editText;  
  19.     private MediaPlayer mediaPlayer;  
  20.     private String fileName=null;  
  21.     private int postition;  
  22.     private static final String TAG="MusicPlayerActivity";  
  23.     @Override  
  24.     public void onCreate(Bundle savedInstanceState)   
  25.     {  
  26.         super.onCreate(savedInstanceState);  
  27.         setContentView(R.layout.main);  
  28.         mediaPlayer=new MediaPlayer();  
  29.           
  30.         editText=(EditText)findViewById(R.id.option);  
  31.         fileName=editText.getText().toString();  
  32.           
  33.         Button start=(Button)findViewById(R.id.start);  
  34.         Button pause=(Button)findViewById(R.id.pause);  
  35.         Button replay=(Button)findViewById(R.id.replay);  
  36.         Button stop=(Button)findViewById(R.id.stop);  
  37.           
  38.         start.setOnClickListener(this);  
  39.         pause.setOnClickListener(this);  
  40.         replay.setOnClickListener(this);  
  41.         stop.setOnClickListener(this);  
  42.     }  
  43.   
  44.     @Override  
  45.     public void onClick(View v)   
  46.     {  
  47.         Button continue_but=(Button)v;  
  48.         try   
  49.         {  
  50.             switch (v.getId())  
  51.             {  
  52.                 case R.id.start://开始   
  53.                 {  
  54.                     play();  
  55.                 }break;  
  56.                 case R.id.pause://暂停   
  57.                 {  
  58.                     //如果正在播放,则停止   
  59.                     if(mediaPlayer.isPlaying())  
  60.                     {  
  61.                         mediaPlayer.pause();  
  62.                         continue_but.setText(R.string.conti);//把暂停设置为继续播放   
  63.                     }  
  64.                     else//否则继续播放   
  65.                     {  
  66.                         mediaPlayer.start();  
  67.                         continue_but.setText(R.string.pause);//把继续播放按键设置为暂停   
  68.                     }  
  69.                 }break;  
  70.                 case R.id.replay: // 重播   
  71.                 {  
  72.                     if(mediaPlayer.isPlaying())  
  73.                     {  
  74.                         mediaPlayer.seekTo(0);//重新开始放   
  75.                     }  
  76.                     else  
  77.                     {  
  78.                         play();  
  79.                     }  
  80.                 }  
  81.                     break;  
  82.                 case R.id.stop: //停止   
  83.                 {  
  84.                     if(mediaPlayer.isPlaying())  
  85.                     {  
  86.                         mediaPlayer.stop();  
  87.                     }  
  88.                 }  
  89.                     break;  
  90.                 default:break;  
  91.             }  
  92.         }   
  93.         catch (Exception e)   
  94.         {  
  95.             Log.e(TAG, e.toString());  
  96.             e.printStackTrace();  
  97.         }  
  98.     }  
  99.   
  100.     private void play() throws IOException   
  101.     {  
  102.         //文件在SD卡,所以要弄个File对象   
  103.         File file=new File(Environment.getExternalStorageDirectory(),fileName);  
  104.         mediaPlayer.reset();  
  105.         //设置你要播放的文件在什么地方   
  106.         mediaPlayer.setDataSource(file.getAbsolutePath());  
  107.         Log.i("ABS", file.getAbsolutePath());//得到的结果就为/mnt/sdcard/saybye.mp3   
  108.         //开始初始化, 渲染   
  109.         mediaPlayer.prepare();  
  110.         //开始播放   
  111.         mediaPlayer.start();  
  112.     }  
  113.   
  114.     @Override  
  115.     protected void onDestroy()  
  116.     {  
  117.         mediaPlayer.release();//释放掉资源   
  118.         super.onDestroy();  
  119.     }  
  120.       
  121.     //解决当电话来的时候,使音乐暂停   
  122.     //当别的Activity来的时候,此Activity肯定会处于暂停状态。   
  123.     @Override  
  124.     protected void onPause()  
  125.     {  
  126.         if(mediaPlayer.isPlaying())  
  127.         {  
  128.             //记录下当前音乐播放的位置   
  129.             postition=mediaPlayer.getCurrentPosition();  
  130.             //暂停音乐   
  131.             mediaPlayer.pause();  
  132.         }  
  133.         super.onPause();  
  134.     }  
  135.   
  136.     //回到本Activity的时候   
  137.     @Override  
  138.     protected void onResume()   
  139.     {  
  140.         //如果有设置的断点,并且文件名不为空,则又开始播放   
  141.         if(postition>0 && fileName!=null)  
  142.         {  
  143.             try   
  144.             {  
  145.                 play();  
  146.                 mediaPlayer.seekTo(postition); //执行到指定断点   
  147.                 postition=0;  
  148.             }  
  149.             catch (IOException e)   
  150.             {  
  151.                 e.printStackTrace();  
  152.             }  
  153.         }  
  154.         super.onResume();  
  155.     }  
  156.     //解决内存不够的时候   
  157.     //当被杀掉了,第二次运行此程序的时候,把上次的值给取出来   
  158.     @Override  
  159.     protected void onRestoreInstanceState(Bundle savedInstanceState)  
  160.     {  
  161.         postition=savedInstanceState.getInt("postition");  
  162.         fileName=savedInstanceState.getString("fileName");  
  163.         super.onRestoreInstanceState(savedInstanceState);  
  164.     }  
  165.   
  166.     //当内存不够的时候,系统有可能会杀掉某个应用程序   
  167.     //所以这个时候可以当在杀掉的时候,就可以把数据给保存下来,以供下次使用   
  168.     @Override  
  169.     protected void onSaveInstanceState(Bundle outState)   
  170.     {  
  171.         //保存下断点位置以及文件名   
  172.         outState.putInt("postition", postition);  
  173.         outState.putString("fileName", fileName);  
  174.         super.onSaveInstanceState(outState);  
  175.     }  
  176. }  

相关内容