android视频播放器-源码

wolf_xuan 贡献于2014-08-19

作者 Administrator  创建于2010-12-09 15:45:00   修改者Windows 用户  修改于2011-03-06 08:30:00字数7487

文档摘要:本文讲的是“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. package com.bestaone;    2.    3. import android.app.Activity;    4. import android.content.Intent;    5. import android.net.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.     @Override   23.     public void onCreate(Bundle savedInstanceState) {    24.         super.onCreate(savedInstanceState);    25.         requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);    26.         setContentView(R.layout.main);    27.         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//    28.         //设置标题栏的布局    29.         getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.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.             @Override   37.             public void onClick(View v) {    38.                 Intent intent = new Intent();    39.                 intent.setClass(VideoPlay.this, MyFile.class);     40.                 //打开MyFile activity    41.                 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.     @Override   60.     protected void onStart() {    61.         super.onStart();    62.         Log.i("mp4", "@@@ on start");    63.     }    64.    65.     @Override   66.     protected void onResume() {    67.         super.onResume();    68.         videoView.seekTo(index);    69.         videoView.start();    70.         Log.i("mp4", "@@@ on resume");    71.     }    72.    73.     //暂停    74.     @Override   75.     protected void onPause() {    76.         super.onPause();    77.         Log.i("mp4", "@@@ on pause");    78.     }    79.    80.     //停止    81.     @Override   82.     protected void onStop() {    83.         super.onStop();    84.         videoView.pause();    85.         //在这里记住视频播放的位置,当屏幕横竖切换的时候可以从记录点继续播放    86.         index = videoView.getCurrentPosition();    87.         Log.i("mp4", "@@@ on stop");    88.     }    89.    90.     //销毁    91.     @Override   92.     protected void onDestroy() {    93.         super.onDestroy();    94.         // videoView.destroyDrawingCache();    95.         index = videoView.getCurrentPosition();    96.         Log.i("mp4", "@@@ on destroy");    97.     }    98.    99. }     MyFile.java view 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 android.net.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 items = null; // items:存放显示的名称    37.     private List paths = null; // paths:存放文件路径    38.     private List 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.     @Override   50.     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.     @Override   68.     protected void onCreate(Bundle icicle) {    69.         super.onCreate(icicle);    70.         setContentView(R.layout.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.     @Override   98.     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 file   107.      * @param flag   108.      */   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 filePath   120.      */   121.     private void getFileDir(String filePath) {    122.         /* 设置目前所在路径 */   123.         path_edit.setText(filePath);    124.         items = new ArrayList();    125.         paths = new ArrayList();    126.         sizes = new ArrayList();    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 = fileName.lastIndexOf(".");    143.                     if(index>0){    144.                         String endName = fileName.substring(index,fileName.length()).toLowerCase();    145.                         String type = null;    146.                         for(int x=0; x arg0, View arg1, int arg2,    188.             long arg3) {    189.         // TODO Auto-generated method stub    190.         return false;    191.     }    192.    193. }  

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 2 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档