歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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. }  
Copyright © Linux教程網 All Rights Reserved