歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android 簡單視頻播放器

Android 簡單視頻播放器

日期:2017/3/1 10:47:24   编辑:Linux編程

//結構目錄


只有一個主Activity,處理一切事情

//程序運行效果


//看看代碼

  1. package sn.len.video;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import Android.app.Activity;
  5. import android.media.AudioManager;
  6. import android.media.MediaPlayer;
  7. import android.os.Bundle;
  8. import android.os.Environment;
  9. import android.view.SurfaceHolder;
  10. import android.view.SurfaceView;
  11. import android.view.View;
  12. import android.view.View.OnClickListener;
  13. import android.widget.EditText;
  14. import android.widget.ImageButton;
  15. public class VideoPlayerActivity extends Activity implements OnClickListener
  16. {
  17. private EditText editText;
  18. private String fileName;
  19. private MediaPlayer mediaPlayer;
  20. private SurfaceView surfaceView;
  21. private int position;
  22. @Override
  23. public void onCreate(Bundle savedInstanceState)
  24. {
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.main);
  27. mediaPlayer=new MediaPlayer();
  28. surfaceView=(SurfaceView)findViewById(R.id.surfaceview);
  29. //設置surfaceView的一些初始化參數
  30. //得到要操作SurfaceView的對象
  31. SurfaceHolder surfaceHolder=surfaceView.getHolder();
  32. //設置屏幕像索
  33. surfaceHolder.setFixedSize(200, 200);
  34. //不用屏幕緩沖
  35. surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  36. //處理當電話來電時,而addCallback裡面是一個接口,所以弄個類來實現它才行
  37. surfaceHolder.addCallback(new MyCallback());
  38. editText=(EditText)findViewById(R.id.fileName);
  39. fileName=editText.getText().toString();
  40. ImageButton start=(ImageButton)findViewById(R.id.play);
  41. ImageButton pause=(ImageButton)findViewById(R.id.pause);
  42. ImageButton replay=(ImageButton)findViewById(R.id.reset);
  43. ImageButton stop=(ImageButton)findViewById(R.id.stop);
  44. start.setOnClickListener(this);
  45. pause.setOnClickListener(this);
  46. replay.setOnClickListener(this);
  47. stop.setOnClickListener(this);
  48. }
  49. private class MyCallback implements SurfaceHolder.Callback
  50. {
  51. //當第二次surface創建的時候,已經拿到了上次的斷點就可以接著放了。
  52. @Override
  53. public void surfaceChanged(SurfaceHolder holder, int format, int width,int height)
  54. {
  55. if(position>0 && fileName!=null)
  56. {
  57. try
  58. {
  59. play();
  60. mediaPlayer.seekTo(position);
  61. position=0;
  62. }
  63. catch (IOException e)
  64. {
  65. e.printStackTrace();
  66. }
  67. }
  68. }
  69. @Override
  70. public void surfaceCreated(SurfaceHolder holder)
  71. {
  72. }
  73. //當電話來的時候,也就是surface要消毀的時候,記錄視頻的位置
  74. @Override
  75. public void surfaceDestroyed(SurfaceHolder holder)
  76. {
  77. position=mediaPlayer.getCurrentPosition();
  78. mediaPlayer.stop();
  79. }
  80. }
  81. @Override
  82. public void onClick(View v)
  83. {
  84. //可以判斷下SD卡是否存在
  85. //Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
  86. try {
  87. switch (v.getId())
  88. {
  89. case R.id.play:
  90. {
  91. play();
  92. }break;
  93. case R.id.pause:
  94. {
  95. if(mediaPlayer.isPlaying())
  96. {
  97. mediaPlayer.pause();
  98. }
  99. else
  100. {
  101. mediaPlayer.start();
  102. }
  103. }break;
  104. case R.id.reset:
  105. {
  106. if(mediaPlayer.isPlaying())
  107. {
  108. mediaPlayer.seekTo(0);
  109. }
  110. else
  111. {
  112. play();
  113. }
  114. }break;
  115. case R.id.stop:
  116. {
  117. if(mediaPlayer.isPlaying())
  118. {
  119. mediaPlayer.stop();
  120. }
  121. }break;
  122. default:break;
  123. }
  124. } catch (IOException e)
  125. {
  126. e.printStackTrace();
  127. }
  128. }
  129. private void play() throws IOException
  130. {
  131. File videoFile=new File(Environment.getExternalStorageDirectory(),fileName);
  132. mediaPlayer.reset();
  133. //設置影片類型
  134. mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
  135. //讓surfaceView來播放
  136. mediaPlayer.setDisplay(surfaceView.getHolder());
  137. //設置路徑
  138. mediaPlayer.setDataSource(videoFile.getAbsolutePath());
  139. mediaPlayer.prepare();//緩沖
  140. mediaPlayer.start();//播放
  141. }
  142. }
Copyright © Linux教程網 All Rights Reserved