当前位置:文档之家› android视频播放器-源码

android视频播放器-源码

本文讲的是“android 视频播放器”,并附有播放器源代码1.开发环境:eclipse3.6ADT-0.9.7AVD1.62.程序运行效果A.启动AVD(虚拟设备)在应用程序界面主界面,我们可以看到“艾文播放器”B.点击打开后,会播放默认的一个coco的广告C.点击标题栏的按钮可以打开文件浏览器D.点击视频文件,会提示使用的播放器E.选择“艾文视频播放器”打开后,按ctrl+f12,切换到横屏,发现视频并没有中断,而是继续播放3.源码分析A.图片都是网上找的,还有就是自己收藏的地方翻出来的,不多讲了。

B.布局文件main.xml:期中包含一个videoview,用于播放视频图像titlebar.xml:主视图的标题栏布局,主要用于添加一个菜单按钮,点击后打开文件浏览器myfile.xml:为文件浏览器布局C.VideoPlay.javaview plaincopy to clipboardprint?1.package com.bestaone;2.3.import android.app.Activity;4.import android.content.Intent;5.import .Uri;6.import android.os.Bundle;7.import android.util.Log;8.import android.view.View;9.import android.view.View.OnClickListener;10.import android.view.Window;11.import android.view.WindowManager;12.import android.widget.ImageButton;13.import android.widget.MediaController;14.import android.widget.TextView;15.import android.widget.VideoView;16.17.public class VideoPlay extends Activity {18.19. private VideoView videoView;20. private static int index = 0;21.22.@Override23. public void onCreate(Bundle savedInstanceState) {24. super.onCreate(savedInstanceState);25. requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);26. setContentView(yout.main);27. getWindow().setFlags(youtParams.FLAG_FULLSCREEN, WindoyoutParams.FLAG_FULLSCREEN);//28. //设置标题栏的布局29. getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, yout.titlebar);30. //这个空间暂时没用31. final TextView titleTV = (TextView) findViewById(R.id.title);32. titleTV.setText("");33. ImageButton titleButton = (ImageButton) findViewById(R.id.titleButton);34. //为按钮添加鼠标点击事件35. titleButton.setOnClickListener(new OnClickListener() {36.@Override37. public void onClick(View v) {38. Intent intent = new Intent();39. intent.setClass(VideoPlay.this, MyFile.class);40. //打开MyFile activity41. startActivity(intent);42. }43. });44. Intent intent = getIntent();45. String value = intent.getDataString();46. videoView = (VideoView) findViewById(R.id.VideoView01);47. if(value==null){48. //加载默认视频49. videoView.setVideoURI(Uri.parse("android.resource://com.bestaone/" + R.drawable.coco));50. }else{51. //通过文件浏览器传过来的视频路径,播放52. videoView.setVideoPath(value);53. }54. videoView.setMediaController(new MediaController(VideoPlay.this));55. videoView.requestFocus();56. }57.58. //启动59.@Override60. protected void onStart() {61. super.onStart();62. Log.i("mp4", "@@@ on start");63. }64.65.@Override66. protected void onResume() {67. super.onResume();68. videoView.seekTo(index);69. videoView.start();70. Log.i("mp4", "@@@ on resume");71. }72.73. //暂停74.@Override75. protected void onPause() {76. super.onPause();77. Log.i("mp4", "@@@ on pause");78. }79.80. //停止81.@Override82. protected void onStop() {83. super.onStop();MyFile.javaview plaincopy to clipboardprint?1.package com.bestaone;2.3.import java.io.File;4.import java.util.ArrayList;5.import java.util.List;6.7.import android.app.ListActivity;8.import android.content.Intent;9.import .Uri;10.import android.os.Bundle;11.import android.view.KeyEvent;12.import android.view.View;13.import android.widget.AdapterView;14.import android.widget.AdapterView.OnItemLongClickListener;15.import android.widget.Button;16.import android.widget.EditText;17.import android.widget.ImageButton;18.import android.widget.ListView;19.import android.widget.TextView;20.import android.widget.Toast;21.22.public class MyFile extends ListActivity implements OnItemLongClickListener {23.24. //支持的视频格式25. private final String[][] FILE_MapTable = {26.27. // {后缀名, MIME类型}28. { ".3gp", "video/3gpp" },29. { ".mov", "video/quicktime" },30. { ".avi", "video/x-msvideo" },31. { ".rmvb", "audio/x-pn-realaudio" },32. { ".wmv", "audio/x-ms-wmv" }33.34. };35.36. private List<String> items = null; // items:存放显示的名称37. private List<String> paths = null; // paths:存放文件路径38. private List<String> sizes = null; // sizes:文件大小39. private String rootPath = "/"; // rootPath:起始文件夹40. private TextView path_edit;41. private ImageButton rb_qry;42. private int isZoom = 0;43. private int isOpen = 0;44.45.46. /**47. * 重写返回键功能:返回上一级文件夹48. */49.@Override50. public boolean onKeyDown(int keyCode, KeyEvent event) {51. // 是否触发按键为back键52. if (keyCode == KeyEvent.KEYCODE_BACK) {53. path_edit = (EditText) findViewById(R.id.path_edit);54. File file = new File(path_edit.getText().toString());55. if (rootPath.equals(path_edit.getText().toString())) {56. return super.onKeyDown(keyCode, event);57. } else {58. getFileDir(file.getParent());59. return true;60. }61. // 如果不是back键正常响应62. } else {63. return super.onKeyDown(keyCode, event);64. }65. }66.67.@Override68. protected void onCreate(Bundle icicle) {69. super.onCreate(icicle);70. setContentView(yout.myfile);71.72. path_edit = (EditText) findViewById(R.id.path_edit);73. rb_qry = (ImageButton) findViewById(R.id.qry_button);74. rb_qry.setOnClickListener(listener_qry);75. getListView().setOnItemLongClickListener(this);76. getFileDir(rootPath);77. }78.79. Button.OnClickListener listener_qry = new Button.OnClickListener() {80. public void onClick(View arg0) {81. File file = new File(path_edit.getText().toString());82. if (file.exists()) {83. if (file.isFile()) {84. openFile(file);85. } else {86. getFileDir(path_edit.getText().toString());87. }88. } else {89. Toast.makeText(MyFile.this, "找不到该位置,请确定位置是否正确!",Toast.LENGTH_SHORT).show();90. }91. }92. };93.94. /**95. * 设置ListItem被点击时要做的动作96. */97.@Override98. protected void onListItemClick(ListView l, View v, int position, long id) {99. File file = new File(paths.get(position));100. fileOrDirHandle(file);101. }102.103.104. /**105. * 处理文件或者目录的方法106. * @param file107. * @param flag108. */109. private void fileOrDirHandle(final File file) {110. if (file.isDirectory()) {111. getFileDir(file.getPath());112. } else {113. openFile(file);114. }115. }116.117. /**118. * 取得文件结构的方法119. * @param filePath120. */121. private void getFileDir(String filePath) {122. /* 设置目前所在路径 */123. path_edit.setText(filePath);124. items = new ArrayList<String>();125. paths = new ArrayList<String>();126. sizes = new ArrayList<String>();127. File f = new File(filePath);128. File[] files = f.listFiles();129. if (files != null) {130. /* 将所有文件添加ArrayList中 */131. for (int i = 0; i < files.length; i++) {132. if (files[i].isDirectory()) {133. items.add(files[i].getName());134. paths.add(files[i].getPath());135. sizes.add("");136. }137. }138.139. for (int i = 0; i < files.length; i++) {140. if (files[i].isFile()) {141. String fileName = files[i].getName();142. int index = stIndexOf(".");143. if(index>0){144. String endName = fileName.substring(index,fileName.length()).toLowe rCase();145. String type = null;146. for(int x=0; x<FILE_MapTable.length; x++){147. //支持的格式,才会在文件浏览器中显示148. if(endName.equals(FILE_MapTable[x][0])){149. type = FILE_MapTable[x][1];150. break;151. }152. }153. if(type!=null){154. items.add(files[i].getName());155. paths.add(files[i].getPath());156. sizes.add(MyUtil.fileSizeMsg(files[i]));157. }158. }159. }160. }161. }162. /* 使用自定义的MyAdapter来将数据传入ListActivity */163. setListAdapter(new FileListAdapter(this, items, paths, sizes, isZoom)); 164. }165.166.167. /**168. * 打开文件169. * @param f170. */171. private void openFile(File f) {172. Intent intent = new Intent();173. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);174. intent.setAction(android.content.Intent.ACTION_VIEW);175. // 跳出列表供选择176. String type = "video/*";177. if (isOpen == 0) {178. type = MyUtil.getMIMEType(f, true);179. }180. // 设置intent的file与MimeType181. intent.setDataAndType(Uri.fromFile(f), type);182.// intent.putExtra("path", "sms_context");183. startActivity(intent);184. }185.186.@Override187. public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, 188. long arg3) {189. // TODO Auto-generated method stub190. return false;191. }192.193.}。

相关主题