MobliePlayer自定义最简单的视频播放器
tags:最近7天
前言:
通过android系统自的播放器快速自定义播放器VideoView用于播放本地视频。
新建一个Activity
新建的SystemVideoPlayer Activity继承于Activity,布局文件为activity_system_video_player,
public class SystemVideoPlayer extends Activity {
private VideoView videoview;
private Uri uri;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_system_video_player);
videoview = (VideoView) findViewById(R.id.videoview);
//得到播放地址,本地址由调用的面面通过setDataAndType传送过来
uri=getIntent().getData();
//设置播入器的地址到VideoView
videoview.setVideoURI(uri);
//设置播改数据是否准备好,应有这个监听,
//setOnPreparedListener注册一个回调函数,以便在加载媒体文件准备就绪时调用。
//MediaPlayer mp返回一个准备好的媒体播放器
//videoview.start()启动播放
videoview.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
videoview.start();
}
});
/**
* 播放错误的方法
*/
videoview.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
Toast.makeText(SystemVideoPlayer.this,"播放器错误",Toast.LENGTH_LONG).show();
return true;
}
});
/**
* 播放完毕的方法
*/
videoview.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
Toast.makeText(SystemVideoPlayer.this,"播放完成",Toast.LENGTH_LONG).show();
finish();
}
});
/**
* 显示播放控制面板
*/
videoview.setMediaController(new MediaController(this));
}
}
播放界面
根据以上代码,可知我们的播放界面布局文件为activity_system_video_player.xml
采用最简单的RelativeLayout(相对布局)中加入一个VideoView来实现。
android:background="#000000"页面设置为黑色,
android:layout_centerInParent="true"播放器设置为父窗体居中。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:gravity="center"
android:background="#000000"
android:layout_height="match_parent">
<VideoView
android:layout_centerInParent="true"
android:id="@+id/videoview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
系统注册SystemVideoPlayer.java
打开工程清单文件AndroidManifest.xml,其中的android:screenOrientation="landscape"这个控制播放时界面为横屏,
android:screenOrientation各参数如下:
“unspecified”:默认值 由系统来推断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向.
“landscape”:横屏显示(宽比高要长)//本例使用的参数
“portrait”:竖屏显示(高比宽要长)
“user”:用户当前首选的方向
“behind”:和该Activity以下的那个Activity的方向一致(在Activity堆栈中的)
“sensor”:有物理的感应器来决定。假设用户旋转设备这屏幕会横竖屏切换。
“nosensor”:忽略物理感应器。这样就不会随着用户旋转设备而更改了
<activity android:name=".SystemVideoPlayer" android:screenOrientation="landscape"></activity>
实现全屏的代码
将以下代码放入SystemVideoPlayer.java的setContentView(R.layout.activity_system_video_player);之前。用于去掉手机的系统栏,实现播放时真正全屏。
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
完整代码
package plczl.cn.mobileplayer;
import android.app.Activity;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.widget.MediaController;
import android.widget.Toast;
import android.widget.VideoView;
import androidx.annotation.Nullable;
public class SystemVideoPlayer extends Activity {
private VideoView videoview;
private Uri uri;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_system_video_player);
videoview = (VideoView) findViewById(R.id.videoview);
//得到播放地址,本地址由调用的面面通过setDataAndType传送过来
uri=getIntent().getData();
//设置播入器的地址到VideoView
videoview.setVideoURI(uri);
//设置播改数据是否准备好,应有这个监听,
//setOnPreparedListener注册一个回调函数,以便在加载媒体文件准备就绪时调用。
//MediaPlayer mp返回一个准备好的媒体播放器
//videoview.start()启动播放
videoview.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
videoview.start();
}
});
/**
* 播放错误的方法
*/
videoview.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
Toast.makeText(SystemVideoPlayer.this,"播放器错误",Toast.LENGTH_LONG).show();
return true;
}
});
/**
* 播放完毕的方法
*/
videoview.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
Toast.makeText(SystemVideoPlayer.this,"播放完成",Toast.LENGTH_LONG).show();
finish();
}
});
/**
* 显示播放控制面板
*/
videoview.setMediaController(new MediaController(this));
}
}
来源:CSDN
作者:郑华伟
链接:https://blog.csdn.net/weixin_44880903/article/details/104372529