歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android Activity編程之視頻播放界面

Android Activity編程之視頻播放界面

日期:2017/3/1 10:00:44   编辑:Linux編程

最近涉及到一個需要Android播放視頻的界面,內容不多,直接上代碼。

先看布局文件act_video_play,裡面有一個VideoView組件:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="fill_parent"
  • android:layout_height="fill_parent"
  • android:background="#ff000000"
  • android:gravity="center" >
  • <VideoView
  • android:id="@+id/videoView"
  • android:layout_width="wrap_content"
  • android:layout_height="wrap_content"
  • android:layout_gravity="center" />
  • </LinearLayout>

再來看activity代碼:

  1. package com.example.playmp4;
  2. import android.app.Activity;
  3. import android.app.Dialog;
  4. import android.app.ProgressDialog;
  5. import android.content.DialogInterface;
  6. import android.content.DialogInterface.OnKeyListener;
  7. import android.content.Intent;
  8. import android.media.MediaPlayer;
  9. import android.media.MediaPlayer.OnCompletionListener;
  10. import android.media.MediaPlayer.OnPreparedListener;
  11. import android.net.Uri;
  12. import android.os.Bundle;
  13. import android.os.Environment;
  14. import android.util.DisplayMetrics;
  15. import android.view.KeyEvent;
  16. import android.widget.LinearLayout;
  17. import android.widget.LinearLayout.LayoutParams;
  18. import android.widget.MediaController;
  19. import android.widget.VideoView;
  20. public class PlayMP4 extends Activity {
  21. private VideoView videoView;
  22. private int play_progress;
  23. private String video_url;
  24. private String progress_Title;
  25. private Dialog progress;
  26. @Override
  27. protected void onCreate(Bundle savedInstanceState) {
  28. super.onCreate(savedInstanceState);
  29. setContentView(R.layout.act_video_play);
  30. Intent intent = getIntent();
  31. video_url = intent.getStringExtra("video_url");
  32. progress_Title = intent.getStringExtra("title");
  33. // for test
  34. video_url = Environment.getExternalStorageDirectory().toString()
  35. + "/dcim/100MEDIA/VIDEO0002.mp4";
  36. if (this.progress_Title == null)
  37. this.progress_Title = "Loading";
  38. play_progress = intent.getIntExtra("play_progress", 0);
  39. videoView = (VideoView) findViewById(R.id.videoView);
  40. progress = ProgressDialog.show(this, "loading", progress_Title);
  41. progress.setOnKeyListener(new OnKeyListener() {
  42. @Override
  43. public boolean onKey(DialogInterface dialog, int keyCode,
  44. KeyEvent event) {
  45. if (keyCode == KeyEvent.KEYCODE_BACK) {
  46. dialog.dismiss();
  47. PlayMP4.this.finish();
  48. }
  49. return false;
  50. }
  51. });
  52. videoView.setVideoURI(Uri.parse(video_url));
  53. MediaController controller = new MediaController(this);
  54. videoView.setMediaController(controller);
  55. videoView.requestFocus();
  56. videoView.setLayoutParams(new LinearLayout.LayoutParams(
  57. LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
  58. videoView.setOnPreparedListener(new OnPreparedListener() {
  59. @Override
  60. public void onPrepared(MediaPlayer mp) {
  61. if (progress != null)
  62. progress.dismiss();
  63. }
  64. });
  65. videoView.setOnCompletionListener(new OnCompletionListener() {
  66. @Override
  67. public void onCompletion(MediaPlayer mp) {
  68. if (progress != null)
  69. progress.dismiss();
  70. }
  71. });
  72. }
  73. @Override
  74. public boolean onKeyDown(int keyCode, KeyEvent event) {
  75. if (keyCode == KeyEvent.KEYCODE_BACK) {
  76. Intent intent = new Intent();
  77. intent.putExtra("play_progress", videoView.getCurrentPosition());
  78. setResult(RESULT_OK, intent);
  79. }
  80. return super.onKeyDown(keyCode, event);
  81. }
  82. @Override
  83. protected void onResume() {
  84. super.onResume();
  85. videoView.seekTo(play_progress);
  86. videoView.start();
  87. }
  88. @Override
  89. protected void onStop() {
  90. super.onStop();
  91. if (videoView != null) {
  92. videoView.pause();
  93. play_progress = videoView.getCurrentPosition();
  94. }
  95. if (progress != null) {
  96. progress.dismiss();
  97. }
  98. }
  99. }

video_url這個就是播放的地址,可以是本地文件地址,也可以是網絡上的鏈接。

play_progress為播放進度。當這個播放界面關閉後,會返回該值給上一級界面。下次再播放同一個視頻時,就可以直接從上一次停止的位置播放。如何處理記錄播放位置,這個就根據應用情況,請自行設計,這裡就不多啰嗦了。

這個就不附工程了,代碼如上。

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved