9512.net
甜梦文库
当前位置:首页 >> >>

android视频播放器-源码


本文讲的是“android 视频播放器”,并附有播放器源代码

1.开发环境: eclipse3.6 ADT-0.9.7 AVD1.6 2.程序运行效果

A.启动 AVD(虚拟设备)在应用程序界面主界面,我们可以看到“艾文

播放器”

B.点击打开后,会播放默认的一个 coco 的广告

C.点击标题栏的按钮可以打开文件浏览器

D.点击视频文件,会提示使用的播放器

E.选择“艾文视频播放器”打开后,按 ctrl+f12,切换到横屏,发现视

频并没有中断,而是继续播放

3.源码分析

A.图片都是网上找的,还有就是自己收藏的地方翻出来的,不多讲了。

B.布局文件 main.xml:期中包含一个 videoview,用于播放视频图像 titlebar.xml:主视图的标题栏布局,主要用于添加一个菜单按钮,点 击后打开文件浏览器 myfile.xml:为文件浏览器布局

C.VideoPlay.java
view plaincopy to clipboardprint? 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); setContentView(R.layout.main); private VideoView videoView; private static int index = 0; public class VideoPlay extends Activity { import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.view.WindowManager; import android.widget.ImageButton; import android.widget.MediaController; import android.widget.TextView; import android.widget.VideoView; package com.bestaone;

27.

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, Windo wManager.LayoutParams.FLAG_FULLSCREEN);//

28. 29.

//设置标题栏的布局 getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.titlebar);

30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.

//这个空间暂时没用 final TextView titleTV = (TextView) findViewById(R.id.title); titleTV.setText(""); ImageButton titleButton = (ImageButton) findViewById(R.id.titleButton); //为按钮添加鼠标点击事件 titleButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setClass(VideoPlay.this, MyFile.class); //打开 MyFile activity startActivity(intent); } }); Intent intent = getIntent(); String value = intent.getDataString(); videoView = (VideoView) findViewById(R.id.VideoView01); if(value==null){ //加载默认视频 videoView.setVideoURI(Uri.parse("android.resource://com.bestaone/" + R.draw able.coco));

50. 51. 52. 53.

}else{ //通过文件浏览器传过来的视频路径,播放 videoView.setVideoPath(value); }

54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. } } } }

videoView.setMediaController(new MediaController(VideoPlay.this)); videoView.requestFocus();

//启动 @Override protected void onStart() { super.onStart(); Log.i("mp4", "@@@ on start");

@Override protected void onResume() { super.onResume(); videoView.seekTo(index); videoView.start(); Log.i("mp4", "@@@ on resume");

//暂停 @Override protected void onPause() { super.onPause(); Log.i("mp4", "@@@ on pause");

//停止 @Override protected void onStop() { super.onStop();

84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. } } }

videoView.pause(); //在这里记住视频播放的位置,当屏幕横竖切换的时候可以从记录点继续播放 index = videoView.getCurrentPosition(); Log.i("mp4", "@@@ on stop");

//销毁 @Override protected void onDestroy() { super.onDestroy(); // videoView.destroyDrawingCache(); index = videoView.getCurrentPosition(); Log.i("mp4", "@@@ on destroy");

package com.bestaone; import import import import import import import import import import import import import android.app.Activity; android.content.Intent; android.net.Uri; android.os.Bundle; android.util.Log; android.view.View; android.view.View.OnClickListener; android.view.Window; android.view.WindowManager; android.widget.ImageButton; android.widget.MediaController; android.widget.TextView; android.widget.VideoView;

public class VideoPlay extends Activity {

MyFile.java
view plaincopy to clipboardprint?

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.

package com.bestaone;

import java.io.File; import java.util.ArrayList; import java.util.List;

import android.app.ListActivity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast;

public class MyFile extends ListActivity implements OnItemLongClickListener {

//支持的视频格式 private final String[][] FILE_MapTable = {

// {后缀名, MIME 类型} { ".3gp", "video/3gpp" }, { ".mov", "video/quicktime" }, { ".avi", "video/x-msvideo" },

31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. /** };

{ ".rmvb", "audio/x-pn-realaudio" }, { ".wmv", "audio/x-ms-wmv" }

private List<String> items = null; // items:存放显示的名称 private List<String> paths = null; // paths:存放文件路径 private List<String> sizes = null; // sizes:文件大小 private String rootPath = "/"; // rootPath:起始文件夹 private TextView path_edit; private ImageButton rb_qry; private int isZoom = 0; private int isOpen = 0;

* 重写返回键功能:返回上一级文件夹 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // 是否触发按键为 back 键 if (keyCode == KeyEvent.KEYCODE_BACK) { path_edit = (EditText) findViewById(R.id.path_edit); File file = new File(path_edit.getText().toString()); if (rootPath.equals(path_edit.getText().toString())) { return super.onKeyDown(keyCode, event); } else { getFileDir(file.getParent()); return true; }

61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. } } }

// 如果不是 back 键正常响应 } else { return super.onKeyDown(keyCode, event);

@Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.myfile);

path_edit = (EditText) findViewById(R.id.path_edit); rb_qry = (ImageButton) findViewById(R.id.qry_button); rb_qry.setOnClickListener(listener_qry); getListView().setOnItemLongClickListener(this); getFileDir(rootPath);

Button.OnClickListener listener_qry = new Button.OnClickListener() { public void onClick(View arg0) { File file = new File(path_edit.getText().toString()); if (file.exists()) { if (file.isFile()) { openFile(file); } else { getFileDir(path_edit.getText().toString()); } } else { Toast.makeText(MyFile.this, "找不到该位置,请确定位置是否正确!",Toast.LENGTH _SHORT).show();

90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. /** } } /** } /** }; }

}

* 设置 ListItem 被点击时要做的动作 */ @Override protected void onListItemClick(ListView l, View v, int position, long id) { File file = new File(paths.get(position)); fileOrDirHandle(file);

* 处理文件或者目录的方法 * @param file * @param flag */ private void fileOrDirHandle(final File file) { if (file.isDirectory()) { getFileDir(file.getPath()); } else { openFile(file);

* 取得文件结构的方法 * @param filePath

120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144.

*/ private void getFileDir(String filePath) { /* 设置目前所在路径 */ path_edit.setText(filePath); items = new ArrayList<String>(); paths = new ArrayList<String>(); sizes = new ArrayList<String>(); File f = new File(filePath); File[] files = f.listFiles(); if (files != null) { /* 将所有文件添加 ArrayList 中 */ for (int i = 0; i < files.length; i++) { if (files[i].isDirectory()) { items.add(files[i].getName()); paths.add(files[i].getPath()); sizes.add(""); } }

for (int i = 0; i < files.length; i++) { if (files[i].isFile()) { String fileName = files[i].getName(); int index = fileName.lastIndexOf("."); if(index>0){ String endName = fileName.substring(index,fileName.length()).toLowe

rCase(); 145. 146. 147. 148. String type = null; for(int x=0; x<FILE_MapTable.length; x++){ //支持的格式,才会在文件浏览器中显示 if(endName.equals(FILE_MapTable[x][0])){

149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. /** * 打开文件 * @param f */ } } } } } } } }

type = FILE_MapTable[x][1]; break;

if(type!=null){ items.add(files[i].getName()); paths.add(files[i].getPath()); sizes.add(MyUtil.fileSizeMsg(files[i]));

/* 使用自定义的 MyAdapter 来将数据传入 ListActivity */ setListAdapter(new FileListAdapter(this, items, paths, sizes, isZoom));

private void openFile(File f) { Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(android.content.Intent.ACTION_VIEW); // 跳出列表供选择 String type = "video/*"; if (isOpen == 0) { type = MyUtil.getMIMEType(f, true);

179. 180. 181. 182. // 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. } } }

} // 设置 intent 的 file 与 MimeType intent.setDataAndType(Uri.fromFile(f), type); intent.putExtra("path", "sms_context"); startActivity(intent);

@Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub return false;



更多相关文章:
基于Android系统的视频播放器
基于Android系统的视频播放器_计算机软件及应用_IT/计算机_专业资料。基于Android系统...谷歌并且 获得了免费开源许可的授权,Android 源代码公布于大众,Android 系统的...
Android课程设计视频播放器
Android课程设计视频播放器_计算机软件及应用_IT/计算机_专业资料。一个基于...视频播放软件工程文件主要包括 src 文件夹(Java 源码) 、res 文件夹(资源文件)...
基于Android视频播放器的设计与实现--毕业论文
最后对全文进行了总结和展望,附录部分为主要功能的函数源代码。 3 合肥学院计算机科学与技术系毕业论文 第二章 Android视频播放器相关技术介绍 2.1 Android 介绍 ...
安卓音乐播放器开发,含源代码_图文
安卓音乐播放器开发,含源代码_计算机软件及应用_IT/计算机_专业资料。安卓音乐...使手机显得更生动灵活化,与人们更为接近,让手机主人随 时随地处于音乐视频的...
Android经典项目源码学习包括工具、安全、影音等多个领...
Android经典项目源码学习包括工具、安全、影音等多个领域的项目_计算机软件及应用_...网络视频播放器源码.zip 音乐播放器.zip 音乐播放器(晴天播放).zip 音乐播放...
android 播放视频代码
"vertical"android:layout_width="match_parent"android:layout_ 3height="match_parent"> 4<!-- 定义 VideoView 播放视频 --> 5 </linearlayout> Activity: ...
基于android平台的视频播放器设计文献综述
基于android平台的视频播放器设计文献综述_计算机软件及应用_IT/计算机_专业资料。...2.1.2 android 平台 Android 是一种以 Linux 为基础的开放源码操作系统, ...
基于android视频播放器 开题报告
基于android视频播放器 开题报告_计算机软件及应用_IT/计算机_专业资料。一、立题意义及国内外的研究现状与存在问题,主要研究内容及拟解决的 关键性问题(含文献...
全网最全的Android源码汇总
全网最全的Android源码汇总_计算机软件及应用_IT/计算机_专业资料。全网最全的...mod=viewthread&tid=321&fromuid=1 Android 网络视频播放器源码 http://neast...
安卓课程设计 视频播放器
安卓课程设计 视频播放器_理学_高等教育_教育专区。安卓课程设计 ...视频播放软件工程文件主要包括 src 文件夹(Java 源码) 、res 文件夹(资源文件)...
更多相关标签:

All rights reserved Powered by 甜梦文库 9512.net

copyright ©right 2010-2021。
甜梦文库内容来自网络,如有侵犯请联系客服。zhit325@126.com|网站地图