歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android音樂播放器(雛形)

Android音樂播放器(雛形)

日期:2017/3/1 11:12:00   编辑:Linux編程
建議:學習本實例之前,請掌握Activity的生命周期相關的事件和方法,這樣學習效果會更好。

本實例僅供參考學習,並非一款非常完善的產品。由於時間和本人技術有限,不足或者錯誤之處敬請諒解。希望熱心的網友能夠繼續完善。

相關閱讀:

Android中的Activity生命周期 http://www.linuxidc.com/Linux/2011-01/31804.htm

Android Activity生命周期以及LoCat的使用 http://www.linuxidc.com/Linux/2011-05/36655.htm

下面是Activity部分代碼(我一般都會有詳細注釋):

  1. package cn.chaoyang.activity;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import android.app.Activity;
  5. import android.media.MediaPlayer;
  6. import android.os.Bundle;
  7. import android.os.Environment;
  8. import android.text.BoringLayout.Metrics;
  9. import android.view.View;
  10. import android.widget.Button;
  11. import android.widget.EditText;
  12. //學習本實例之前,請掌握Activity的生命周期和相關的方法,這樣學習效果會更好。
  13. public class MainActivity extends Activity {
  14. private MediaPlayer mediaplayer;
  15. private EditText txtName;
  16. private int postion;
  17. private String fileName;
  18. /** Called when the activity is first created. */
  19. @Override
  20. public void onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.main);
  23. ButtonClickListener listener =new ButtonClickListener();
  24. txtName =(EditText)this.findViewById(R.id.inputName);
  25. Button btnPlay =(Button)this.findViewById(R.id.btnPlay);
  26. Button btnPause =(Button) this.findViewById(R.id.btnPause);
  27. Button btnStop =(Button) this.findViewById(R.id.btnStop);
  28. Button btnResart=(Button) this.findViewById(R.id.btnRestart);
  29. btnPlay.setOnClickListener(listener);
  30. btnPause.setOnClickListener(listener);
  31. btnStop.setOnClickListener(listener);
  32. btnResart.setOnClickListener(listener);
  33. }
  34. //當系統恢復後,可以重新讀取出之前保存的狀態值
  35. @Override
  36. protected void onRestoreInstanceState(Bundle savedInstanceState) {
  37. this.fileName=savedInstanceState.getString("fileName");
  38. this.postion=savedInstanceState.getInt("postion");
  39. super.onRestoreInstanceState(savedInstanceState);
  40. }
  41. //當發生意外時,在系統將Activity的進程殺死之前,保存一些狀態值
  42. @Override
  43. protected void onSaveInstanceState(Bundle outState) {
  44. outState.putString("fileName", fileName);
  45. outState.putInt("postion",postion);
  46. super.onSaveInstanceState(outState);
  47. }
  48. //onDestroy方法可以殺掉程序的進程,徹底釋放資源
  49. @Override
  50. protected void onDestroy() {
  51. mediaplayer.release();
  52. super.onDestroy();
  53. }
  54. //如果打電話結束了,繼續播放音樂
  55. @Override
  56. protected void onResume() {
  57. if(postion>0&&fileName!=null)
  58. {
  59. try {
  60. play();
  61. } catch (IOException e) {
  62. // TODO Auto-generated catch block
  63. e.printStackTrace();
  64. }
  65. mediaplayer.seekTo(postion);
  66. postion=0;
  67. }
  68. super.onResume();
  69. }
  70. //如果突然來電話或者來短信,Acticity會暫停,停止播放音樂
  71. @Override
  72. protected void onPause() {
  73. if(mediaplayer.isPlaying())
  74. {
  75. postion =mediaplayer.getCurrentPosition();//保存當前播放點
  76. mediaplayer.stop();
  77. }
  78. super.onPause();
  79. }
  80. private final class ButtonClickListener implements View.OnClickListener
  81. {
  82. @Override
  83. public void onClick(View v) {
  84. // TODO Auto-generated method stub
  85. mediaplayer =new MediaPlayer();
  86. Button button =(Button) v ;
  87. try {
  88. switch (v.getId())
  89. {
  90. //播放
  91. case R.id.btnPlay:
  92. if(!mediaplayer.isPlaying())
  93. {
  94. play();
  95. }
  96. break;
  97. //暫停
  98. case R.id.btnPause:
  99. //如果正在播放,則按下按鈕後暫停.且按鈕上的文本顯示為"繼續“
  100. if(mediaplayer.isPlaying())
  101. {
  102. mediaplayer.pause();
  103. button.setText(R.string.txtContinue);//設置按鈕文本
  104. }else{
  105. //如果是暫停狀態,按下按鈕後繼續播放
  106. //play();
  107. }
  108. break;
  109. //停止
  110. case R.id.btnStop:
  111. if(mediaplayer.isPlaying()){
  112. mediaplayer.stop();
  113. }
  114. break;
  115. //重復
  116. case R.id.btnRestart:
  117. if(mediaplayer.isPlaying()){
  118. mediaplayer.seekTo(0);
  119. }else{
  120. play();
  121. }
  122. break;
  123. }
  124. }catch (Exception e) {
  125. // TODO: handle exception
  126. }
  127. }
  128. }
  129. private void play() throws IOException
  130. {
  131. //獲得音樂文件的絕對路徑
  132. fileName=txtName.getText().toString();
  133. File file =new File(Environment.getExternalStorageDirectory(),fileName);
  134. mediaplayer.reset();//歸位
  135. mediaplayer.setDataSource(file.getAbsolutePath());//設置需要播放的數據源
  136. mediaplayer.prepare();
  137. mediaplayer.start();
  138. }
  139. }
Copyright © Linux教程網 All Rights Reserved