业务场景:安卓实现播放视频的功能,支持播放不同类型资源下的视频,下面在使用中封装了一个方法,可以根据需要修改调用
一、直接上封装方法
void videoReady(String videoPath ,String videoType){
switch (videoType) {
case "network":
// 处理网络文件的播放逻辑
// videoPath = "http://example.com/video.mp4" (网络视频的URL)
videoView = findViewById(R.id.video_view);
videoView.setVideoURI(Uri.parse(videoPath));
break;
case "resource":
// 处理资源路径下的文件的播放逻辑
// videoPath = "video_example" (资源文件名,例如raw文件夹下的video_example.mp4)
videoView = findViewById(R.id.video_view);
String packageName = getPackageName();
int resId = getResources().getIdentifier(videoPath, "raw", packageName);
videoView.setVideoURI(Uri.parse("android.resource://" + packageName + "/" + resId));
break;
case "local":
// 处理手机内置的文件的播放逻辑
// videoPath = "/storage/emulated/0/videos/video.mp4" (手机内部存储的视频文件路径)
videoView = findViewById(R.id.video_view);
videoView.setVideoPath(videoPath);
break;
default:
// 处理其他情况的播放逻辑
videoView = findViewById(R.id.video_view);
int resId2 = getResources().getIdentifier("numlive", "raw", getPackageName());
videoView.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + resId2));
break;
}
// 初始化VideoView
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// 设置视频填充模式为全屏
// mp.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
// 设置屏幕为横屏
// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
mp.setScreenOnWhilePlaying(true);
// mp.setVolume(0, 0);
mp.start();
}
});
}
二、解释
这段代码是一个视频播放器的方法。根据传入的视频路径和视频类型,它会选择不同的播放逻辑。
如果视频类型是"network",则会处理网络文件的播放逻辑。视频路径是网络视频的URL,通过VideoView的setVideoURI方法设置视频的播放地址。
如果视频类型是"resource",则会处理资源路径下的文件的播放逻辑。视频路径是资源文件名,例如raw文件夹下的video_example.mp4。通过获取应用程序的包名和资源ID,然后通过VideoView的setVideoURI方法设置视频的播放地址。
如果视频类型是"local",则会处理手机内置的文件的播放逻辑。视频路径是手机内部存储的视频文件路径,通过VideoView的setVideoPath方法设置视频的播放路径。
如果视频类型不是上述三种情况,则会处理其他情况的播放逻辑。这里使用了一个默认的视频资源作为演示,通过获取应用程序的包名和默认视频资源的ID,然后通过VideoView的setVideoURI方法设置视频的播放地址。
在方法中还有一些其他操作,如设置VideoView的准备监听器,当视频准备好后,会进行一些设置,如设置视频填充模式为全屏、设置屏幕为横屏、设置屏幕常亮等。最后调用MediaPlayer的start方法开始播放视频。