鱼C论坛

 找回密码
 立即注册
查看: 3640|回复: 7

[原创]android学习之简单的视频播放器

[复制链接]
发表于 2014-11-18 22:20:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x


1.Mainfest.xml文件的配置:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3.     package="com.example.video"
  4.     android:versionCode="1"
  5.     android:versionName="1.0" >

  6.     <uses-sdk
  7.         android:minSdkVersion="12"
  8.         android:targetSdkVersion="17" />

  9.     <application
  10.         android:allowBackup="true"
  11.         android:icon="@drawable/ic_launcher"
  12.         android:label="@string/app_name"
  13.         android:theme="@style/AppTheme" >
  14.         <activity
  15.             android:name="com.example.video.MainActivity"
  16.             android:label="@string/app_name" >
  17.             <intent-filter>
  18.                 <action android:name="android.intent.action.MAIN" />

  19.                 <category android:name="android.intent.category.LAUNCHER" />
  20.             </intent-filter>
  21.         </activity>
  22.     </application>

  23. </manifest>
复制代码
2.activity_main.xml文件的配置:
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.     xmlns:tools="http://schemas.android.com/tools"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="match_parent"
  5.     android:orientation="vertical"
  6.     tools:context=".MainActivity" >

  7.       <TextView
  8.         android:layout_width="fill_parent"
  9.         android:layout_height="wrap_content"
  10.         android:text="视频名称" />
  11.          
  12.     <EditText
  13.         android:layout_width="fill_parent"
  14.         android:layout_height="wrap_content"
  15.         android:id="@+id/voidename"
  16.         android:inputType="none"
  17.          />
  18.     <SeekBar
  19.         android:layout_width="fill_parent"
  20.         android:layout_height="wrap_content"
  21.         android:id="@+id/seekBar"
  22.         />
  23.     <RelativeLayout
  24.         android:layout_width="fill_parent"
  25.         android:layout_height="wrap_content"
  26.         >
  27.         
  28.         <Button
  29.             android:layout_width="wrap_content"
  30.             android:layout_height="wrap_content"
  31.             android:text="播放"
  32.             android:id="@+id/start"
  33.             android:onClick="startVideo"
  34.             />  
  35.         
  36.     </RelativeLayout>

  37.    
  38.     <SurfaceView
  39.          android:layout_width="fill_parent"
  40.          android:layout_height="240dp"
  41.          android:id="@+id/surfaceView"
  42.         />
  43. </LinearLayout>
复制代码
3、activity代码的实现:
  1. package com.example.video;

  2. import java.io.File;

  3. import android.media.AudioManager;
  4. import android.media.MediaPlayer;
  5. import android.media.MediaPlayer.OnCompletionListener;
  6. import android.os.Bundle;
  7. import android.os.Environment;
  8. import android.os.Handler;
  9. import android.app.Activity;
  10. import android.text.TextUtils;
  11. import android.view.Menu;
  12. import android.view.SurfaceHolder;
  13. import android.view.SurfaceHolder.Callback;
  14. import android.view.SurfaceView;
  15. import android.view.View;
  16. import android.widget.Button;
  17. import android.widget.EditText;
  18. import android.widget.SeekBar;
  19. import android.widget.Toast;

  20. public class MainActivity extends Activity {

  21.         private EditText videoText;
  22.         private SeekBar sb;
  23.         private SurfaceView surfaceView;
  24.         private MediaPlayer mediaPlayer;
  25.         private File file;
  26.         private int position;
  27.         private boolean isStart = true;
  28.         private Button startButton;
  29.         private Handler handler;
  30.         private Runnable r;
  31.         private MyCallback myCallback;
  32.         @Override
  33.         protected void onCreate(Bundle savedInstanceState) {
  34.                 super.onCreate(savedInstanceState);
  35.                 setContentView(R.layout.activity_main);
  36.                 handler = new Handler();
  37.                 startButton = (Button) this.findViewById(R.id.start);    //播放的按钮
  38.                 videoText = (EditText) this.findViewById(R.id.voidename);   //文件框
  39.                 sb = (SeekBar) this.findViewById(R.id.seekBar);   //进度条
  40.                 surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView);   //视频的显示区域
  41.                 myCallback = new MyCallback();   //回调类
  42.                 surfaceView.getHolder().addCallback(myCallback);   //获取摄像头添加回调类
  43.                 r = new MyRunnable();
  44.         }

  45.         private class MyCallback implements Callback   //回调类
  46.         {

  47.                 @Override
  48.                 public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2,
  49.                                 int arg3) {
  50.                         // TODO Auto-generated method stub
  51.                        
  52.                 }

  53.                 @Override
  54.                 public void surfaceCreated(SurfaceHolder arg0) {   //创建surface
  55.                         // TODO Auto-generated method stub
  56.                         if(position > 0)
  57.                         {
  58.                                 start(position);
  59.                         }
  60.                 }

  61.                 @Override
  62.                 public void surfaceDestroyed(SurfaceHolder arg0) {   //结束surface
  63.                         // TODO Auto-generated method stub
  64.                         if(mediaPlayer.isPlaying())
  65.                         {
  66.                                 position = mediaPlayer.getCurrentPosition();
  67.                                 mediaPlayer.stop();
  68.                                
  69.                                 mediaPlayer = null;
  70.                         }
  71.                 }
  72.                
  73.         }
  74.        
  75.         public void startVideo(View v)     //播放按钮的事件
  76.         {
  77.                 String videoName = videoText.getText().toString().trim();    //获取文本框中的内容
  78.                 file = new File(Environment.getExternalStorageDirectory(),    //从sdcard里面获取视频文件
  79.                                 videoName);
  80.                 if(!TextUtils.isEmpty(videoName) && file.exists())
  81.                 {
  82.                         if(isStart)
  83.                         {
  84.                                 start(0);
  85.                                 isStart = false;
  86.                                 startButton.setText("暂停");
  87.                         }else
  88.                         {
  89.                                 stop();
  90.                                 isStart = true;
  91.                                 startButton.setText("播放");
  92.                         }
  93.                 }else
  94.                 {
  95.                         Toast.makeText(this, "该视频文件不存在", Toast.LENGTH_LONG).show();
  96.                 }
  97.         }
  98.         private void stop()   //暂停的方法
  99.         {
  100.                 if(mediaPlayer.isPlaying())
  101.                 {
  102.                         position = mediaPlayer.getCurrentPosition();
  103.                         mediaPlayer.pause();
  104.                        
  105.                 }
  106.         }
  107.         private void start(int position)    //播放的方法
  108.         {
  109.                 try
  110.                 {
  111.                         mediaPlayer = new MediaPlayer();
  112.                         mediaPlayer.reset();
  113.                         mediaPlayer.seekTo(position);  //进度
  114.                         mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
  115.                         mediaPlayer.setDisplay(surfaceView.getHolder());
  116.                         mediaPlayer.setDataSource(file.getAbsolutePath());   //路径的获取
  117.                         mediaPlayer.prepare();
  118.                         //缓冲
  119.                         mediaPlayer.setOnCompletionListener(new MyOnCompletionListener());
  120.                 }catch(Exception e)
  121.                 {
  122.                         e.printStackTrace();
  123.                 }
  124.         }
  125.         private class MyOnCompletionListener implements OnCompletionListener
  126.         {

  127.                 @Override
  128.                 public void onCompletion(MediaPlayer mp) {
  129.                         // TODO Auto-generated method stub
  130.                         sb.setMax(mp.getDuration());  //设置视频的最大值
  131.                         mp.seekTo(position);
  132.                         mp.start();
  133.                         handler.post(r);   //向Handler中发送一个post请求
  134.                 }
  135.         }
  136.         public class MyRunnable implements Runnable    //这个类是设置进度条的进度的!
  137.         {

  138.                 @Override
  139.                 public void run() {
  140.                         // TODO Auto-generated method stub
  141.                         try
  142.                         {
  143.                                 if(mediaPlayer != null && mediaPlayer.isPlaying())
  144.                                 {
  145.                                         sb.setProgress(mediaPlayer.getCurrentPosition());
  146.                                 }
  147.                                 handler.postDelayed(r, 300);
  148.                         }catch(Exception e)
  149.                         {
  150.                                 e.printStackTrace();
  151.                         }
  152.                 }       
  153.         }

  154.         @Override
  155.         protected void onDestroy() {   //当activity销毁的时候就移除回调类
  156.                 // TODO Auto-generated method stub
  157.                 handler.removeCallbacks(r);
  158.                 super.onDestroy();
  159.         }       
  160. }









复制代码

QQ截图20141118215724.png


评分

参与人数 1鱼币 +2 贡献 +2 收起 理由
拈花小仙 + 2 + 2 热爱鱼C^_^

查看全部评分

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-11-18 22:52:56 | 显示全部楼层
好帖。收藏了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-18 23:37:07 | 显示全部楼层
支持玄玄~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-22 08:18:35 | 显示全部楼层
支持下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-8-20 15:17:35 | 显示全部楼层
刷个鱼币
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-8-20 15:18:09 | 显示全部楼层
刷个鱼币
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-12 21:15:37 | 显示全部楼层
观摩一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-9 21:27:33 | 显示全部楼层
赞!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-28 02:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表