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 介绍 ...
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 为基础的开放源码操作系统, ...
安卓音乐播放器开发,含源代码_图文
安卓音乐播放器开发,含源代码_计算机软件及应用_IT/计算机_专业资料。安卓音乐...使手机显得更生动灵活化,与人们更为接近,让手机主人随 时随地处于音乐视频的...
汇集全网最全最好的Android应用源码几年收集心血)
汇集全网最全最好的Android应用源码几年收集心血)_计算机软件及应用_IT/计算机...mod=viewthread&tid=9468&fromuid=7043 Android 应用源码培训教学视频播放器项目 ...
视频播放器源码
视频播放器源码_IT/计算机_专业资料。SoundView.java package com.zh_weir.videoplayer; import com.zh_weir.videoplayer.R; import android.conSoundView.java pa...
全网最全的Android源码汇总
全网最全的Android源码汇总_计算机软件及应用_IT/计算机_专业资料。全网最全的...mod=viewthread&tid=321&fromuid=1 Android 网络视频播放器源码 http://neast...
《基于Android平台的音视频流媒体播放器
47 基于 Android 平台的音视频流媒体播放器摘要伴随着多媒体技术与通信技术的不...源代码,并且本论文中的播放器提供了对网络视频的 解析与播放,是其应用范围更为...
更多相关标签:

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

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