歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android音樂和視頻播放【附源碼】

Android音樂和視頻播放【附源碼】

日期:2017/3/1 10:21:51   编辑:Linux編程

重新學了Android,寫了一個mediaplayer播放的程序實現音樂的播放和視頻的播放,程序效果圖如圖:


完成的基本功能有:1,讀取音樂文件 2.播放音樂文件 3,讀取視頻文件4,播放視頻文件

主要程序源代碼:

  1. package com.huangcheng.media;
  2. import java.io.IOException;
  3. import java.util.Timer;
  4. import java.util.TimerTask;
  5. import android.app.Activity;
  6. import android.media.AudioManager;
  7. import android.media.MediaPlayer;
  8. import android.media.MediaPlayer.OnCompletionListener;
  9. import android.os.Bundle;
  10. import android.view.SurfaceHolder;
  11. import android.view.SurfaceView;
  12. import android.view.View;
  13. import android.view.View.OnClickListener;
  14. import android.widget.Button;
  15. import android.widget.SeekBar;
  16. import android.widget.SeekBar.OnSeekBarChangeListener;
  17. import android.widget.Toast;
  18. public class MediaDemoActivity extends Activity {
  19. //控制音樂
  20. private SeekBar seekbar_music;
  21. private Button start_music_btn;
  22. private Button stop_music_btn;
  23. //控制視頻
  24. private SeekBar seekbar_video;
  25. private Button start_video_btn;
  26. private Button stop_video_btn;
  27. private SurfaceView surfaceview_video;
  28. private SurfaceHolder surfaceview_holder;
  29. //播放器
  30. private MediaPlayer media=null;
  31. private MediaPlayer media_video=null;
  32. private Timer timer;
  33. private TimerTask timertask_music;
  34. private TimerTask timertask_video;
  35. //互斥量,seekbar拖動和Timer
  36. private volatile boolean ischanging=false;
  37. /** Called when the activity is first created. */
  38. @Override
  39. public void onCreate(Bundle savedInstanceState) {
  40. super.onCreate(savedInstanceState);
  41. setContentView(R.layout.main);
  42. //控制media
  43. media=new MediaPlayer();
  44. media_video=new MediaPlayer();
  45. media.setOnCompletionListener(new OnCompletionListener() {
  46. @Override
  47. public void onCompletion(MediaPlayer arg0) {
  48. // TODO Auto-generated method stub
  49. Toast.makeText(MediaDemoActivity.this, "播放結束", Toast.LENGTH_SHORT).show();
  50. media.release();
  51. }
  52. });
  53. media_video.setOnCompletionListener(new OnCompletionListener() {
  54. @Override
  55. public void onCompletion(MediaPlayer arg0) {
  56. // TODO Auto-generated method stub
  57. Toast.makeText(MediaDemoActivity.this, "播放結束", Toast.LENGTH_SHORT).show();
  58. media_video.release();
  59. }
  60. });
  61. //Timer記錄播放時刻
  62. timer=new Timer();
  63. timertask_music=new TimerTask() {
  64. @Override
  65. public void run() {
  66. // TODO Auto-generated method stub
  67. //正在拖動seekbar,停止Timer
  68. if(ischanging==true){
  69. return;
  70. }
  71. else{
  72. seekbar_music.setProgress(media.getCurrentPosition());
  73. }
  74. }
  75. };
  76. timertask_video=new TimerTask() {
  77. @Override
  78. public void run() {
  79. // TODO Auto-generated method stub
  80. //正在拖動seekbar,停止Timer
  81. if(ischanging==true){
  82. return;
  83. }
  84. else{
  85. seekbar_video.setProgress(media_video.getCurrentPosition());
  86. }
  87. }
  88. };
  89. timer.schedule(timertask_music, 0, 10);//開始記錄,每10ms記錄一次
  90. timer.schedule(timertask_video, 0, 10);//開始記錄,每10ms記錄一次
  91. //更新控件
  92. seekbar_music=(SeekBar)findViewById(R.id.seekbar_music);
  93. seekbar_video=(SeekBar)findViewById(R.id.seekbar_video);
  94. start_music_btn=(Button)findViewById(R.id.start_music_btn);
  95. stop_music_btn=(Button)findViewById(R.id.stop_music_btn);
  96. start_video_btn=(Button)findViewById(R.id.start_video_btn);
  97. stop_video_btn=(Button)findViewById(R.id.stop_video_btn);
  98. surfaceview_video=(SurfaceView)findViewById(R.id.surfaceview_video);
  99. surfaceview_holder=surfaceview_video.getHolder();
  100. surfaceview_holder.setFixedSize(100, 100);
  101. surfaceview_holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  102. seekbar_music.setEnabled(false);
  103. seekbar_video.setEnabled(false);
  104. // 添加處理seekbar事件
  105. seekbar_music.setOnSeekBarChangeListener(new SeekbarmusicEvent());
  106. seekbar_video.setOnSeekBarChangeListener(new SeekbarvideoEvent());
  107. //添加music按鍵處理
  108. start_music_btn.setOnClickListener(new OnClickListener() {
  109. @Override
  110. public void onClick(View arg0) {
  111. // TODO Auto-generated method stub
  112. media.reset();
  113. media=MediaPlayer.create(MediaDemoActivity.this, R.raw.m);
  114. seekbar_music.setMax(media.getDuration());
  115. try {
  116. media.prepare();
  117. } catch (IllegalStateException e) {
  118. // TODO Auto-generated catch block
  119. e.printStackTrace();
  120. } catch (IOException e) {
  121. // TODO Auto-generated catch block
  122. e.printStackTrace();
  123. }
  124. media.start();
  125. seekbar_music.setEnabled(true);
  126. }
  127. });
  128. stop_music_btn.setOnClickListener(new OnClickListener() {
  129. @Override
  130. public void onClick(View arg0) {
  131. // TODO Auto-generated method stub
  132. media.stop();
  133. seekbar_music.setEnabled(false);
  134. }
  135. });
  136. start_video_btn.setOnClickListener(new OnClickListener() {
  137. @Override
  138. public void onClick(View arg0) {
  139. // TODO Auto-generated method stub
  140. media_video.reset();
  141. media_video=MediaPlayer.create(MediaDemoActivity.this, R.raw.v);
  142. seekbar_video.setMax(media_video.getDuration());
  143. media_video.setAudioStreamType(AudioManager.STREAM_MUSIC);
  144. media_video.setDisplay(surfaceview_holder);
  145. try {
  146. media_video.prepare();
  147. } catch (IllegalStateException e) {
  148. // TODO Auto-generated catch block
  149. e.printStackTrace();
  150. } catch (IOException e) {
  151. // TODO Auto-generated catch block
  152. e.printStackTrace();
  153. }
  154. media_video.start();
  155. seekbar_video.setEnabled(true);
  156. }
  157. });
  158. stop_video_btn.setOnClickListener(new OnClickListener() {
  159. @Override
  160. public void onClick(View arg0) {
  161. // TODO Auto-generated method stub
  162. media_video.stop();
  163. seekbar_video.setEnabled(false);
  164. }
  165. });
  166. }
  167. //處理拖動seekbarmusic事件
  168. class SeekbarmusicEvent implements SeekBar.OnSeekBarChangeListener{
  169. @Override
  170. public void onProgressChanged(SeekBar seekBar, int progress,
  171. boolean fromUser) {
  172. // TODO Auto-generated method stub
  173. }
  174. @Override
  175. public void onStartTrackingTouch(SeekBar seekBar) {
  176. // TODO Auto-generated method stub
  177. ischanging=true;//停止timer
  178. }
  179. @Override
  180. public void onStopTrackingTouch(SeekBar seekBar) {
  181. // TODO Auto-generated method stub
  182. media.seekTo(seekBar.getProgress());
  183. ischanging=false;//開啟timer
  184. }
  185. }
  186. class SeekbarvideoEvent implements SeekBar.OnSeekBarChangeListener{
  187. @Override
  188. public void onProgressChanged(SeekBar seekBar, int progress,
  189. boolean fromUser) {
  190. // TODO Auto-generated method stub
  191. }
  192. @Override
  193. public void onStartTrackingTouch(SeekBar seekBar) {
  194. // TODO Auto-generated method stub
  195. ischanging=true;//停止timer
  196. }
  197. @Override
  198. public void onStopTrackingTouch(SeekBar seekBar) {
  199. // TODO Auto-generated method stub
  200. media_video.seekTo(seekBar.getProgress());
  201. ischanging=false;//開啟timer
  202. }
  203. }
  204. }
Copyright © Linux教程網 All Rights Reserved